Cod sursa(job #633442)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 13 noiembrie 2011 19:53:46
Problema Tm Scor 100
Compilator cpp Status done
Runda arhiva-teme-fmi Marime 3 kb
# include <fstream>
# include <cstring>
using namespace std;
ifstream f ("tm.in");
ofstream g ("tm.out");
int k,t,i,ok,stare;
char a[2000];
int main ()
{
	f>>t;
	f.getline (a,100);
	for (k=1;k<=t;k++)
	{
		f.getline (a,2000);
		a[strlen (a)]='Z';//blank
		
		stare=0;
		i=0;//capul de citire/scriere
		ok=1;
		while (stare!=100 && ok==1)//100=stare finala;ok=1 daca s-a aplicat cel putin o tranzitie
		{
			ok=0;
			if (stare==0 && a[i]=='a')//daca sunt in starea 0 si citesc a 
			{
				stare=1;//trec in starea 1
				a[i]='A';//scriu A
				i++;//merg in dreapta
				ok=1;
			}
			if (stare==1 && a[i]=='a')
			{
				i++;//merg in dreapta,ramane starea si simbolul
				ok=1;
			}
			if (stare==1 && a[i]=='b')
			{
				stare=2;
				a[i]='B';
				i--;
				ok=1;
			}
			
			if (stare==1 && a[i]=='B')
			{
				stare=10;
				i++;
				ok=1;
			}
			if (stare==10 && a[i]=='B')
			{
				i++;
				ok=1;
			}
			if (stare==10 && a[i]=='b')
			{
				stare=2;
				a[i]='B';
				i--;
				ok=1;
			}
			if (stare==10 && a[i]=='c')
			{
				stare=4;
				i--;
				ok=1;
			}
			
			
			if (stare==2 && a[i]=='B')
			{	
				i--;
				ok=1;
			}
			if (stare==2 && a[i]=='a')
			{
				i--;
				ok=1;
			}
			if (stare==2 && a[i]=='A')
			{
				stare=0;
				i++;
				ok=1;
			}
			if (stare==0 && a[i]=='B')
			{
				stare=3;
				a[i]='B';
				i++;
				ok=1;
			}
			if (stare==3 && a[i]=='B')
			{	
				i++;
				ok=1;
			}
			if (stare==3 && a[i]=='c')
			{	
				stare=100;
				ok=1;
			}
			if (stare==3 && a[i]=='Z')
			{	
				stare=100;
				ok=1;
			}
			if (stare==3 && a[i]=='b')
			{
				stare=4;
				i--;
				ok=1;
			}
			if (stare==4 && a[i]=='B')
			{
				a[i]='b';
				i--;
				ok=1;
			}
			if (stare==4 && a[i]=='A')
			{
				stare=5;
				i++;
				ok=1;
			}
			if (stare==4 && a[i]=='a')
			{
				stare=5;
				i++;
				ok=1;
			}
			if (stare==1 && a[i]=='c')
			{
				stare=4;
				i--;
				ok=1;
			}
			if (stare==5 && a[i]=='b')
			{
				stare=6;
				a[i]='B';
				i++;
				ok=1;
			}
			if (stare==6 && a[i]=='b')
			{	
				i++;
				ok=1;
			}
			if (stare==6 && a[i]=='C')
			{	
				i++;
				ok=1;
			}
			if (stare==6 && a[i]=='c')
			{
				stare=7;
				a[i]='C';
				i--;
				ok=1;
			}
			if (stare==7 && a[i]=='C')
			{
				i--;
				ok=1;
			}
			if (stare==7 && a[i]=='b')
			{	
				i--;
				ok=1;
			}
			if (stare==7 && a[i]=='B')
			{
				stare=5;
				i++;
				ok=1;
			}
			if (stare==5 && a[i]=='C')
			{
				stare=8;
				i++;
				ok=1;
			}
			if (stare==8 && a[i]=='C')
			{	
				i++;
				ok=1;
			}
			if (stare==8 && a[i]=='Z')
			{	
				stare=100;
				ok=1;
			}
			
			if (stare==0 && a[i]=='b')
			{
				stare=5;
				ok=1;
			}
			if (stare==0 && a[i]=='c')
			{
				stare=100;
				ok=1;
			}
			if (stare==1 && a[i]=='Z')
			{
				stare=100;
				ok=1;
			}
		}
		
	if (stare==100)
		g<<"DA\n";
	else
		g<<"NU\n";
		
		
	}
	return 0;
}