Cod sursa(job #190246)
Utilizator | Data | 21 mai 2008 10:28:05 | |
---|---|---|---|
Problema | Ordine | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.7 kb |
#include <stdio.h>
#include <ctype.h>
struct aa{
int nr;
char ch;
};
aa sol[30];
int a[30],i,n,m,j,max,pozitie;
char c,anterior;
int main()
{FILE *f;
f=fopen("ordine.in","r");
fscanf(f,"%c",&c);
m=0;
while (!feof(f))
{a[c-97]++;
m++;
fscanf(f,"%c",&c);
}
fclose(f);
n=0;
for (i=0;i<26;i++)
if (a[i]!=0) {n++;sol[n].nr=a[i];sol[n].ch=i+97;}
f=fopen("ordine.out","w");
anterior=' ';
for (i=1;i<=m;i++)
{max=sol[1].nr;pozitie=1;
for (j=2;j<=n;j++)
if (max<sol[j].nr) {max=sol[j].nr;pozitie=j;}
if(max>m-max-i+1) {anterior=sol[pozitie].ch;
fprintf(f,"%c",sol[pozitie].ch);
sol[pozitie].nr--;
if (sol[pozitie].nr==0) {for (j=pozitie;j<n;j++)
{sol[j].nr=sol[j+1].nr;
sol[j].ch=sol[j+1].ch;
}
n--;
}
}
else if (anterior!=sol[1].ch) {anterior=sol[1].ch;
fprintf(f,"%c",sol[1].ch);
sol[1].nr--;
if (sol[1].nr==0) {for (j=1;j<=n-1;j++)
{sol[j].nr=sol[j+1].nr;
sol[j].ch=sol[j+1].ch;
}
n--;
}
}
else {anterior=sol[2].ch;
fprintf(f,"%c",sol[2].ch);
sol[2].nr--;
if (sol[2].nr==0) {for (j=2;j<=n-1;j++)
{sol[j].nr=sol[j+1].nr;
sol[j].ch=sol[j+1].ch;
}
n--;
}
}
}
fclose(f);
return 0;
}