Cod sursa(job #40003)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 27 martie 2007 10:34:30
Problema Elimin 2 Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<stdio.h>
#include<string.h>
int l,lg,i,j;
int best(char p[200],char q[2010]);
int move();
int newsol();
char a[200],nul[10],b[200][5],a1[200][200],a2[200][200],a3[200][200],aux1[200],aux2[200],aux3[200],sol[200];
int main()
{
	FILE *f,*g;
	f=fopen("elimin2.in","r");
	g=fopen("elimin2.out","w");
	fgets(a,2010,f);
	l=strlen(a)-1;
	for(i=0;i<l;i++)
	{a2[i][0]=a[i];strcpy(b[i],a2[i]);}
	for(lg=1;lg<l;lg++)
	{ for(i=0;i+lg<l;i++)
	  { strcpy(aux1,a2[i]);
	    strcpy(aux2,a2[i+1]);
	    strcpy(aux3,nul);
	    if(a[i]==a[i+lg])
	    { strcat(aux3,b[i]);strcat(aux3,a1[i+1]);strcat(aux3,b[i]);}
	    if(best(aux1,aux2))
	     { if(best(aux1,aux3)) strcpy(a3[i],aux1);
	       else strcpy(a3[i],aux3);}
	    else
	     { if(best(aux2,aux3)) strcpy(a3[i],aux2);
	       else strcpy(a3[i],aux3);}
	    newsol();
	  }
	  move();
	}

	fprintf(g,"%s\n",sol);
	fcloseall();
	return 0;
}
int best(char p[200],char q[200])
{
 if(strlen(p)>strlen(q)) return 1;
 if(strlen(p)<strlen(q)) return 0;
 if(strcmp(p,q)>0)return 1;
 return 0;
}
int move()
{
	for(j=0;j<=i+2;j++)
	{strcpy(a1[j],a2[j]);
	strcpy(a2[j],a3[j]);}
	return 0;
}
int newsol()
{
	if(strlen(a3[i])<strlen(sol)) return 0;
	if(a3[i][0]=='0') return 0;
	if(strlen(a3[i])>strlen(sol)){ strcpy(sol,a3[i]);return 0;}
	if(strcmp(a3[i],sol)>0) { strcpy(sol,a3[i]);return 0;}
	return 0;
}