Cod sursa(job #306849)

Utilizator iulia609fara nume iulia609 Data 22 aprilie 2009 00:10:01
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.29 kb
#include<fstream>
#include<string>
using namespace std;
char v[1000000];
int a[27];
int main()
{int i,j,k,y1,ok,t,x,max,k1,y,j1;
 char c;
 ifstream f("ordine.in");
 ofstream g("ordine.out");
 
 k=0;max=0;
 while(f>>c)
	 {x=(int)c-(int)'a'+1;
	  a[x]++; 
	  //if(a[x]>max)max=a[x],nr=x;
     }
 
 /*i=1;
 while(a[i]==0)
	 i++;
 k=0; 
 while (a[i]!=0)
	v[++k]=(char)((int)'a'+i-1); 
i++;k=1;
while(i<=max)
    {while(a[i]==0)i++;
     while(a[i]!=0)
	    {if(v[k]!=i)&&)
	     
		}
     }	
 
 */
//k1=a[nr];
i=1;t=0;
while(a[i]==0)i++;
v[++t]=(char)((int)'a'+i-1);
a[i]--;
k=a[i];ok=1;
while(i<=26)
	 {while(a[i]!=0)
		 {if(k==1)
				{v[++t]=(char)((int)'a'+i-1);
	             a[i]--;
				 /*j=i+1;
		         while(v[j]==0)
			     j++;
		         g<<(char)((int)'a'+j-1);
			     v[j]--;ok=1;*/
			     }		
			
			else if(k>1&&ok==1)
		     {j=i+1;
		      while(a[j]==0)
			  j++;
		      v[++t]=(char)((int)'a'+j-1);
			  a[j]--;
		      v[++t]=(char)((int)'a'+i-1);
	          a[i]--;
		     }	
			else if((k>1)&&(a[i]==k))
		    {v[++t]=(char)((int)'a'+i-1);
			 a[i]--;
			 j=i+1;
		         while(a[j]==0)
			     j++;
		         v[++t]=(char)((int)'a'+j-1);
			     a[j]--;
			 v[++t]=(char)((int)'a'+i-1);
			 a[i]--;
			 ok=1;
		     }	
			
		  }
	 i++;k=a[i];ok=0;
	 }
//i=27;
//while(a[i]==0)i--;
/*k1=a[i];nr=(int)'a'+i-1;
i=t;k=0;
while(v[i]!=(char)nr)i-=2,k++;
	 
 if(a[max]!=0)
   {k=a[max]-1;
    i=1;x=t;
	while(i<=x) i++;
	}
	x=i; 
 */
 /*j=t-1;
 while(a[i]!=0)
   {if((v[j+1]!=v[j])&&(v[j-1]!=v[j]))
	   {t++;
		for(k=t;k<=k;k--)
			v[k+1]=v[k];
		v[j]=(char)((int)'a'+i);
		a[i]--;			
        }
   j--;
   }*/
j=t-1;
y=(int)v[j]-(int)'a'+1;
if(y>26||y<0){

k=0;
while(y>26||y<0)k++,j-=2,y=(int)v[j]-(int)'a'+1;

j=t-2;k1=0;y=(int)v[t];
while(v[j]==(char)y)k1++,j-=2;
k1--;

j=t-k1*2;x=k;
y1=t-2*k;//k1=1;

for(j1=y1;j1>=j-1;j1--)
	     v[j1+k]=v[j1];
v[j1+k-1]=(char)y;	
	 y1=j1+k-2;
     j-=2;//k1++;
	 k--;
	
while(k!=0)
    {
	 for(j1=y1;j1>=j-1;j1--)
	     v[j1+k+1]=v[j1];
	 v[j1+k+1]=(char)y;	
	 y1=j1+k-2;
     j-=2;//k1++;
	 k--;
	}
}

	for(i=1;i<=t-x;i++) g<<v[i];
	//for(i=x+1;i<=t;i++)
		//g<<(char)((int)'a'+max-1)<<v[i];
 g<<'\n';
 f.close();
 g.close();
 return 0;
}