Cod sursa(job #873271)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 7 februarie 2013 00:02:19
Problema Perle Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.24 kb
#include <iostream>
#include <string.h>

using namespace std;

int n;

bool exista=false;

char sir[10005];
char v[10005];
    
void f(int poz)
{
     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';
     int contor=0;
     for(contor=0;contor<=poz;contor++)
        cout<<sir[contor]<<' ';
        cout<<endl;
   
   //cazuri particulare de iesire
   if(poz>n)
      return;
            
   if(poz==n && sir[poz]==v[poz])
      exista=true;
   
   if(exista)
      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+1);
      sir[poz]='2';
      f(poz+1);
      sir[poz]='3';
      f(poz+1);
      
      //sir[poz]='A'; ??                 
   }
   else if(sir[poz]=='B')
   {
      strcpy(sir+poz+2,sir+poz+1); //2=1
      sir[poz]='2';
      sir[poz+1]='B';
      f(poz+1);
      
      strcpy(sir+poz+5,sir+poz+1);
      sir[poz]='1';
      sir[poz+1]='A';
      sir[poz+2]='3';
      sir[poz+3]='A';
      sir[poz+4]='C';
   }
   else if(sir[poz]=='C')
   {
      sir[poz+1]='2';
      f(poz+1);
      
      strcpy(sir+poz+2,sir+poz+1);
      sir[poz]='3';
      sir[poz+1]='B';
      sir[poz+2]='C';
      f(poz+1);
      
      sir[poz]='1';
      sir[poz+1]='2';
      sir[poz+2]='A';
      f(poz+1);     
   }
     
     /*
   if(perla=='A')
   {
      f(poz+1,'1');
      f(poz+1,'2');
      f(poz+1,'3');              
   }     
   else if(perla=='B')
   {
     f(poz+1,'2');
     f(poz+2,'B');
     
     f(poz+1,'1');
     f(poz+2,'A');
     f(poz+3,'3');
     f(poz+4,'A');
     f(poz+5,'C');      
   }*/
}

int main()
{
    
    cin>>n;
    int i;
    for(i=0;i<n;i++)
    {
       cin>>v[i];                
    }
    
    sir[0]='A';
    
    if(!exista)
       f(0);
    sir[0]='B';
    
    
    if(!exista)
       f(0);
    sir[0]='C';
    if(!exista)
    f(0);
    
    cout<<exista<<endl;
    
    system("PAUSE");
    return 0;
}