Cod sursa(job #40006)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 27 martie 2007 10:37:37
Problema Elimin 2 Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<stdio.h>
#include<string.h>
int l,lg,i,j;
int best(char p[1000],char q[1000]);
int move();
int newsol();
char a[1000],nul[10],b[1000][5],a1[1000][1000],a2[1000][1000],a3[1000][1000],aux1[1000],aux2[1000],aux3[1000],sol[1000];
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[1000],char q[1000])
{
 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;
}