Pagini recente » Cod sursa (job #2257267) | Cod sursa (job #2376514) | Cod sursa (job #1644800) | Cod sursa (job #953602) | Cod sursa (job #8807)
Cod sursa(job #8807)
#include <cstdio>
#include <iostream>
#include <fstream>
#include <deque>
#include <vector>
#include <set>
#include <string>
using namespace std;
string a, b;
int n, m;
int s[32], poz1,poz2;
string r;
string sol;
int nsize=0x3f3f3f3f;
vector<string>Sol;
void afis(string a)
{
if(a.size()<(unsigned)nsize){ sol=a, nsize=a.size();Sol.clear(); Sol.push_back(a);}
else if(a.size()==(unsigned)nsize) Sol.push_back(a);
}
void back(int k, string a)
{
if(k==m) afis(a);
else
{
int i;
if(a.size()==1)
{
a+=b[k];
back(k+1,a);
}
else
{
for(i=1;i<(signed)a.size()-1;i++)
{
string t=a.substr(0, i);
t+=b[k];
t+=a.substr(i, a.size());
int ok=1;
while(ok)
{
ok=0;
s[0]=1;
poz1=-1, poz2=-1;
for(int j=1;j<(signed)t.size();j++)
if(t[j]==t[j-1]) s[j]=s[j-1]+1;
else { s[j]=1; if(s[j-1]>=3) poz2=j-1,poz1=j-s[j-1];ok=1;}
{
int j=t.size();
if(s[j-1]>=3) poz2=j-1,poz1=j-s[j-1];
}
if(poz1==-1 || poz2==-1) break;
ok=1;
t.erase(t.begin()+poz1,t.begin()+poz2+1);
if(t.size()==0){ printf("%d\n", k+1); exit(0);}
}
back(k+1,t);
}
}
}
}
int main()
{
ifstream f("balls.in");
freopen("balls.out", "w", stdout);
f>>a; f>>b;
n=a.size();
m=b.size();
back(0, a);
set<string> Q(Sol.begin(), Sol.end());
for(set<string>::iterator it=Q.begin();it!=Q.end();it++)printf("%s\n", it->c_str());
return 0;
}