Cod sursa(job #873539)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 7 februarie 2013 12:59:21
Problema Perle Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.65 kb
#include <iostream>
#include <string.h> 
using namespace std; 

int n;
bool exista=false; 

char sir[10005];
char v[10005];     
int lungime=1;

void f(int poz)
{   
	if(exista)      
		return;         
	
	if(v[poz]!='1' && v[poz]!='2' && v[poz]!='3' && v[poz]!='A' && v[poz]!='B' && v[poz]!='C')
		return;     

	cout<<"f("<<poz<<") sir["<<poz<<"]="<<sir[poz]<<'\n';     
	cout<<"exista este "<<exista<<endl;
	
	int contor=0;     
	for(contor=0;contor<=lungime;contor++)        
		cout<<sir[contor]<<' ';        
	cout<<endl;       //cazuri particulare de iesire   
	
	
	if(poz>=n || lungime>n)      
		return;                
	
	if(poz==n-1 && lungime==n && sir[poz]==v[poz])
	{		
		exista=true;
		return;
	}
	
	if(sir[poz]=='1' || sir[poz]=='2' || sir[poz]=='3' )     
		if(sir[poz]==v[poz])        
			f(poz+1);     
		else        
			return;           //sa repar copierile si indicii   
	
		if(sir[poz]=='A')   
		{       			
			sir[poz]='1';
			f(poz);
			
			sir[poz]='2';
			f(poz);
			
			sir[poz]='3';
			f(poz);
		}   
		else if(sir[poz]=='B')   
		{      
			strcpy(sir+poz+1,sir+poz); //2=1      
			
			lungime++;
			sir[poz]='2';      
			sir[poz+1]='B';
			
			f(poz);
			
			lungime+=3;
			strcpy(sir+poz+4,sir+poz+1); //       
			sir[poz]='1';      
			sir[poz+1]='A';      
			sir[poz+2]='3';      
			sir[poz+3]='A';     
			sir[poz+4]='C';   
			
			f(poz);
			
			lungime-=4;
		}   
		else if(sir[poz]=='C')   
		{      
			sir[poz]='2';
			f(poz);        
			lungime+=2;
			
			strcpy(sir+poz+2,sir+poz);      
			sir[poz]='3';      
			sir[poz+1]='B';      
			sir[poz+2]='C'; 
			
			f(poz);
			
			sir[poz]='1';      
			sir[poz+1]='2';      
			sir[poz+2]='A';      
			f(poz);    
			lungime-=2;
		}  
} 

int main()
{         
	cin>>n;    
	int i;    
	
	for(i=0;i<n;i++)    
	{       
		cin>>v[i];        
	}
	       
	/////////////////////
	int contor=0;
	
	for(contor=0;contor<=lungime;contor++)
    {
		sir[contor]=' ';
	}
	lungime=1;
	sir[0]='A';  
	
	cout<<"incep cu A"<<endl;
	if(!exista)       
		f(0);    
	//////////////////////

	for(contor=0;contor<=lungime;contor++)
    {
		sir[contor]=' ';
	}
	lungime=1;
	
	sir[0]='B';              

	cout<<"incep cu B"<<endl;
	if(!exista)       
		f(0);  
//////////////////////////
	for(contor=0;contor<=lungime;contor++)
    {
		sir[contor]=' ';
	}
	
	lungime=1;	
	sir[0]='C';    
	cout<<"incep cu C"<<endl;
	if(!exista)    
		f(0);  

	for(contor=0;contor<=lungime;contor++)
    {
		sir[contor]=' ';
	}
	lungime=1;	
	cout<<exista<<endl; 
	
	system("PAUSE");    
	return 0;
}