Cod sursa(job #109985)

Utilizator rethosPaicu Alexandru rethos Data 25 noiembrie 2007 15:11:24
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream.h>
#include <string.h>
char x[10001];
int l[10001],dim;
int perle()
{ if (dim==1) return 1;
  if (dim==2) return 0;
  int k=0;
  x[0]='0';
  if (l[1]==2) x[1]='B';
	else x[1]='C';
  int n=1;
  while (k<n&&k<dim)
	{ k++;
	  if (x[k]=='B')
		{ switch(l[k])
		       {case 1: strcpy(x+k+5,x+k+1);
				x[k]='1';
				x[k+1]='A';
				x[k+2]='3';
				x[k+3]='A';
				x[k+4]='C';
				n=n+4;
				break;
			case 2: strcpy(x+k+2,x+k+1);
				x[k]='2';
				x[k+1]='B';
				n=n+1;
				break;
			case 3: return 0;}
		}
	  if (x[k]=='C')
		{ switch(l[k])
		       {case 1: strcpy(x+k+3,x+k+1);
				x[k]='1';
				x[k+1]='2';
				x[k+2]='A';
				n=n+2;
				break;
			case 2: x[k]='2';
				break;
			case 3: strcpy(x+k+3,x+k+1);
				x[k]='3';
				x[k+1]='B';
				x[k+2]='C';
				n=n+2;
				break;}
		}
	  if (x[k]=='1'&&l[k]!=1) return 0;
	  if (x[k]=='2'&&l[k]!=2) return 0;
	  if (x[k]=='3'&&l[k]!=3) return 0;
	}
  if (n!=dim) return 0;
  return 1;
}
int main()
{ int n,i,j;
  ifstream f("perle.in");
  ofstream g("perle.out");
  f>>n;
  for (i=1;i<=n;i++)
	{ f>>dim;
	  for (j=1;j<=dim;j++) f>>l[j];
	  g<<perle()<<'\n';
	}
  f.close();
  g.close();
  return 0;
}