Cod sursa(job #306929)

Utilizator iulia609fara nume iulia609 Data 22 aprilie 2009 13:50:23
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.16 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+1;x=k;   
y1=t-2*k+1;//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(j1=y1;j1>=j-1;j1--)   
       v[j1+k+1]=v[j1];   
     }   
v[j1+k+1]=(char)y;
for(i=1;i<=t-x;i++) g<<v[i];   
}   
else  
    for(i=1;i<=t;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;   
}