Pagini recente » Cod sursa (job #1466752) | Cod sursa (job #122245) | Cod sursa (job #859363) | Cod sursa (job #51900) | Cod sursa (job #588446)
Cod sursa(job #588446)
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
char S[2000100];
int A[301];
int nr;
int P;
int swap(int a,int b)
{
int c = S[a];
S[a] = S[b];
S[b] = c;
}
int main()
{
FILE *f = fopen("ordine.in","r");
FILE *g = fopen("ordine.out","w");
fscanf(f,"%s",&S);
nr = strlen(S);
sort(S,S+nr);
for(int i=0;i<nr;i++)
if(!A[S[i]])
A[S[i]] = i;
// fprintf(g,"%s\n",S);
for(int i=1;i<nr;i++)
if(S[i] == S[i-1])
{
int j;
for(j=S[i]+1;!A[j] && j<='z';j++);
if(j < 'z' + 1)
{
P = A[j];
if(S[A[j]+1] == S[A[j]])
A[j] ++;
else
A[j] = 0;
swap(i,P);
}
}
int j = 1;
int k = nr;
for(j=nr-2;S[j] == S[nr-1];j--);
j ++;
printf("%c ",S[j-1]);
if(S[j-2] == S[nr-1])
{
for(k=0;S[k] != S[nr-1];k++);
k --;
k -= (nr-1-j);
printf("1 ");
}
else
{
k = j-(nr-1-j)-1;
printf("0 %d ",nr);
}
j = nr-1-j;
// fprintf(g,"%s\n",S);
// printf("%d %d %c",j,k,S[k]);
for(int i=0;i<=k;i++)
fprintf(g,"%c",S[i]);
for(int i=k+1;i<=k+j;i++)
fprintf(g,"%c%c",S[nr-1],S[i]);
for(int i=k+j+1;i<=nr-j-1;i++)
fprintf(g,"%c",S[i]);
fprintf(g,"\n");
fclose(g);
fclose(f);
return 0;
}