Pagini recente » Cod sursa (job #1681486) | Cod sursa (job #1558409) | Cod sursa (job #2484386) | Cod sursa (job #730339) | Cod sursa (job #997312)
Cod sursa(job #997312)
#include<stdio.h>
char q[1000000];
int v[26];
char w[1000000];
int main()
{
FILE *f, *g;
int i,s=0,a1,a2,c=0,m,u,alt;
f=fopen("ordine.in","r");
g=fopen("ordine.out","w");
fscanf(f,"%s",&q);
//stabilesc vectorul de frecventa
i=0;
while(i<strlen(q))
{
v[q[i]-'a']++;
i++;
}
//stabilesc s .
for(i=0;i<26;i++)
s+=v[i];
//stabilesc a1 si a2
a1=0;
while(v[a1]==0)
a1++;
a2=a1+1;
while(v[a2]==0)
a2++;
while(s>0)
{
while(v[a1]!=0 && v[a2]!=0)
{
if(a1+'a'>='a' && a1+'a'<='z')
{
//fprintf(g,"%c",a1+'a');
w[c]=a1+'a';
c++;
}
v[a1]--;s--;
if(v[a1]!=0)
{
if(a2+'a'>='a' && a2+'a'<='z')
{
//fprintf(g,"%c",a2+'a');
w[c]=a2+'a';
c++;
}
v[a2]--;s--;
}
}
if(v[a1]==0)
{
a1=a2;
a2=a1+1;
while(v[a2]==0)
a2++;
}
else
{
a2++;
while(v[a2]==0)
a2++;
}
}
//printf("c=%d\n",c);
for(i=1;i<c;i++)
{
if(!(w[i-1]!=w[i]))
{
//printf("am intrat in if,i=%d\n");
m=i-1;
//printf("m=%d\n",m);
while(w[m]==w[m+1])
m--;
//printf("am iesit din while si m=%d\n",m);
alt=w[i-1];
for(u=c;u>=m;u--)
w[u+1]=w[u];
c++;
w[m]=alt;
//printf("w[%d]=%c\n",m,w[m]);
for(u=w[i-2];u<c;u++)
w[u]=w[u+1];
c--;
}
}
for(i=0;i<c;i++)
fprintf(g,"%c",w[i]);
fclose(f);
fclose(g);
return 0;
}