Cod sursa(job #40066)

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

	fprintf(g,"%s\n",sol);
	fcloseall();
	return 0;
}
int best(char p[1500],char q[1500])
{
 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;
}