Cod sursa(job #202002)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 5 august 2008 15:07:25
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream.h>
#include <iostream.h>

#define FIN "perle.in"
#define FOUT "perle.out"
#define N_MAX 11000

int T,y;
char a[N_MAX],x[N_MAX];

int solve(int n)
{
int i,j,k,nr;

for(i=1;i<=n;i++)
   {
    switch(x[i])
	  {
	  case 'a':
	    {
	   x[i]=a[i];
	   break;
	   }
	     case 'b':
		{
		  if(a[i]=='2')//2b
		    {
		    for(j=n+1;j>=i+2;j--)
		    x[j]=x[j-1];
		    x[i]='2';
		    x[i+1]='b';
		     n=n+1;
		    }
	      if(a[i]=='1') //1a3ac
		{
		for(j=n+4;j>=i+5;j--)
		x[j]=x[j-4];
		x[i]='1';
		x[i+1]='a';
		x[i+2]='3';
		x[i+3]='a';
		x[i+4]='c';
		n=n+4;
	       }
		  break;
		   }
		       case 'c':
			    {
			  if(a[i]=='2') //2
			  x[i]='2';
			  if(a[i]=='3')//3bc
				{
				 for(j=n+2;j>=i+3;j--)
				 x[j]=x[j-2];
				 x[i]='3';
				 x[i+1]='b';
				 x[i+2]='c';
				 n=n+2;
				   }
			     if(a[i]=='1')//12a
				  {
				    for(j=n+2;j>=i+3;j--)
				    x[j]=x[j-2];
				    x[i]='1';
				    x[i+1]='2';
				    x[i+2]='a';
				    n=n+2;
				   }
	  break;
	 }
  }
if(n>y)
  return 0;
if(n==y)
{
   nr=0;
   for(k=1;k<=y;k++)
   if(a[k]!=x[k])
   {
   nr=1;
   break;
   }
   if (!nr) return 1;
  }
 }
 return 0;
}

int main()
{
int i,j,k,ok;

ifstream f(FIN);
ofstream g(FOUT);

f>>T;

while (T)
  {
  f>>y;
  for(j=1;j<=y;j++) f>>a[j];
  ok=0;
		 x[1]='a';
		 if (solve(1)==1)
		     {
		      g<<1<<endl;
		      ok=1;
		      }
		 x[1]='b';
		 if (solve(1)==1 && ok==0)
		     {
		      g<<1<<endl;
		      ok=1;
		      }
		 x[1]='c';
		 if (solve(1)==1 && ok==0)
		     {
		      g<<1<<endl;
		      ok=1;
		      }
		 if (ok==0)
		     g<<0<<endl;
--T;
 }
f.close();
g.close();
return 0;
}