题目:http://codeforces.com/contest/1138/problem/D
/*
1.这只是一道KMP算法的题。。。。字符串匹配的问题。
2.KMP算法 :
重点在next[],next[i]记录了当i处的值不匹配时,跳转到 next[i]的位置。
eg: a a a b b a a (空格忽略)
next -1 0 1 -1 -1 0 1
*/
#include<bits/stdc++.h>
using namespace std;
const int N=500000+5;
char stra[N],strb[N];
char ans[N];
int next1[N];
int main()
{
scanf("%s",stra);
scanf("%s",strb);
int suma[2]={0},sumb[2]={0};
int lena=strlen(stra);
int lenb=strlen(strb);
for(int i=0;i<lena;i++)suma[stra[i]-'0']++;
next1[0]=-1;
int k=-1;
for(int i=1;i<lenb;i++)
{
while(strb[i]!=strb[k+1]&&k!=-1)k=next1[k];
if(strb[i]==strb[k+1])
{
next1[i]=++k;
}
else next1[i]=-1;//k==-1,k也可以
}
for (int i=0,j=0;i<lena;i++,j++){
if (j==lenb)j=next1[lenb-1]+1;
if (suma[strb[j]-'0']) ans[i]=strb[j],suma[strb[j]-'0']--;
else ans[i]='0'+((strb[j]-'0')^1);
}
printf("%s",ans);
return 0;
}