Cod sursa(job #588446)

Utilizator maritimCristian Lambru maritim Data 7 mai 2011 23:55:10
Problema Ordine Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#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;
}