Pagini recente » Cod sursa (job #1779087) | Cod sursa (job #1469761) | Cod sursa (job #1487070) | Cod sursa (job #1671487) | Cod sursa (job #12028)
Cod sursa(job #12028)
#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]--;
}
}