Cod sursa(job #11810)

Utilizator pocaituDavid si Goliat pocaitu Data 1 februarie 2007 19:59:47
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include<fstream.h>
#include<string.h>
int mi=100,nr,min=100;
char c,cc[1000][14],b[100];



void rezolva(char s[14],int k)
{int n,i,j,d,gasit;
 char s1[14],c;
if(!strlen(s))
   {if(k<mi)
	   mi=k;
	return;
	}
if(mi==100)
{ if(strlen(s)<min&&k==strlen(b))
   {min=strlen(s);
	nr=1;
	strcpy(cc[1],s);
	}
 else if(strlen(s)==min)
   {for(d=1;d<=nr;d++)
	 if(!strcmp(s,cc[d]))
	break;
	if(d==nr+1)
	 strcpy(cc[++nr],s);   }
}
if(k>=strlen(b))
   return;

 if(strlen(s)==1)
   {s[1]=(b+k)[0];s[2]=NULL;
	rezolva(s,k+1);
	return;
	}
 n=strlen(s);
 for(i=0;i<strlen(s)-1;i++)
  {n=strlen(s);
   c=(b+k)[0];
   for(j=0;j<=i;j++)
	s1[j]=s[j];
   s1[j]=c;
   for(++j;j<=n;j++)

	s1[j]=s[j-1];
   s1[j]=NULL;
   n++;
   gasit=1;
   do
	{for(j=0;j<n;j++)
	  {for(d=1;d+j<n&&s1[d+j]==s1[j];d++);
		 if(d>=3&&j<n)
			break;
	   j=j+d-1;
	   }
	 if(j<n)
	   {for(j=j;j<n-d;j++)
		 s1[j]=s1[j+d];
		s1[j]=NULL;
		n=j;
		}
	 else
	   gasit=0;
	 }
   while(gasit);

   rezolva(s1,k+1);



   }
 }
int main()
{char s[14];
 int long i;
 ifstream f("balls.in");
 f>>s>>b;
 rezolva(s,0);
 ofstream g("balls.out");
 if(mi<100)
  {g<<mi;
   g.close();
   return 0;
   }
 char aux[14];
 int long j;
 for(i=1;i<=nr;i++)
  for(j=i+1;j<=nr;j++)
   if(strcmp(cc[i],cc[j])>0)
	{strcpy(aux,cc[i]);
	 strcpy(cc[i],cc[j]);
	 strcpy(cc[j],aux);
	 }

 for(i=1;i<=nr;i++)
  g<<cc[i]<<'\n';
 g.close();
 return 0;
 }