Pagini recente » Cod sursa (job #97963) | Cod sursa (job #3282292) | Cod sursa (job #273560) | Cod sursa (job #1651914) | Cod sursa (job #2458798)
#include<fstream>
#include<queue>
#include<algorithm>
#include<cstring>
#define pp pair<int,int>
#define inf 1000000000
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int nod,aux,a,b,dif,ok,sol,i,j,n,m,s[3],d[16001],f[16001];
char c[3][16001];
vector<pp > v[16000];
priority_queue<pp,vector<pp >,greater<pp > > q;
int main()
{
for(i=0;i<=2;i++)
{
fin>>c[i];
s[i]=strlen(c[i]);
}
m=16000;
sort(s,s+3);
for(i=0;i<=m;i++)
{
d[i]=inf;
for(j=0;j<=2;j++)
if(j==0||s[j]!=s[j-1])
{
a=i+s[j];
if(a<=m) v[i].push_back(make_pair(a,s[j]));
b=i-s[j]; if(b<0) b=-b;
if(b!=a) v[i].push_back(make_pair(b,s[j]));
}
}
d[0]=0;q.push(make_pair(0,0));
while(!q.empty())
{
nod=q.top().second;
if(f[nod]==1) continue;
f[nod]=1;
for(auto it:v[nod])
if(d[it.first]<d[nod]+it.second)
{
d[it.first]=d[nod]+it.second;
q.push(make_pair(d[it.first],it.first));
}
}
sol=inf;
for(i=0;i<=2;i++)
{
aux=strlen(c[i]);
for(j=0;c[i][j];j++)
{
dif=aux-2*j-1;if(dif<0) dif=-dif;
if(c[i][j]=='1')
sol=min(sol,d[dif]+aux);
}
}
if(sol==inf) fout<<0; else;
fout<<sol;
return 0;
}