Cod sursa(job #12028)

Utilizator Sorin_IonutBYSorynyos Sorin_Ionut Data 2 februarie 2007 18:04:49
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <fstream.h>
#include <string.h>

ifstream fin("balls.in");
ofstream fout("balls.out");

char disp[15]="";
char tras[15]="";
int sol,n,nr[5],nrs[5],nrr=0;
char solutie[500][15],s[15],aux[15];

void afisare();
void rez();
void inser(char *aux,int x,char b);
void verif(char *aux);
int cauta(char b);
void back(int k);

int main()
{
 fin>>disp;
 fin>>tras;
 fin.close();
 rez();
   if(sol==0) 
   {
    for(int i=0;disp[i];i++)
     if(disp[i]=='b')
     {
      n++;              
      nr[1]++;
     }
     else
     {
      n++;   
      nr[2]++;
     }    
    back(0);              
    afisare();
   }
   else
   {
    fout<<sol;
    fout.close();
   }
return 0;
}

void afisare()
{
 int i=0;
 
  while(solutie[i][0])
   fout<<solutie[i++]<<'\n';
   
   fout.close();
}

void rez()
{  
 int i,sw=1,nr,poz;
 char bila;
 nr=strlen(tras);
 
 verif(disp);
 for(i=1;(i<=nr)&&(sw);i++)
 {
  bila=tras[i-1];
  poz=cauta(bila);
  inser(disp,poz,bila);
  verif(disp);
   if(strlen(disp)==0)
   {
    sol=i;
    sw=0;
   }
 }
                                   
}

void inser(char *aux,int x,char b)
{
 int i,lun;
 
 lun=strlen(aux);
 for(i=lun;i>=x;i--)
  aux[i+1]=aux[i];
 aux[x]=b;
}

void verif(char *aux)
{
 int i,lun,j,cont=0;
 
 lun=strlen(aux);
 for(i=0;i<=lun-1;i++)
 {
  if((aux[i]==aux[i+1])&&(aux[i+1]==aux[i+2]))
   if(aux[i+3]==aux[i+2])
    for(j=i;j<=lun-3;j++)
     aux[j]=aux[j+4];    
   else
    for(j=i;j<=lun-2;j++)
     aux[j]=aux[j+3];
  else
  {
   cont++;    
   continue;
  }
 }                                         
 if(cont!=lun)
  verif(aux);
}

int cauta(char b)
{
 int i,n;
 
 n=strlen(disp);
  for(i=0;i<=n-1;i++)
   if((disp[i]==disp[i+1])&&(disp[i]==b))
    return i+1;
  for(i=0;i<=n-1;i++)
   if(disp[i]==b)
    return i+1;
return 2;
}
  
void back(int k)
{
 if(k==n)
 {
  strcpy(aux,s);
  verif(aux);
   if(strcmp(aux,s)==0)       
    strcpy(solutie[nrr++],s);
 }   
 else
  for(int i=1;i<=2;i++)
   if(nr[i]>nrs[i])
   {
    nrs[i]++;
    if(i==1)
     s[k]='b';
    else
     s[k]='r';
    back(k+1);
    nrs[i]--;
   }
}