Pagini recente » Cod sursa (job #3151436) | Cod sursa (job #2292615) | Cod sursa (job #2551230) | Cod sursa (job #2325148) | Cod sursa (job #1787716)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char sir1[2000010],sir2[2000010];
int v[1010],d[2000010];
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
int l1,k,l2,sol=0;
scanf("%s\n",sir1+1);
scanf("%s",sir2+1);
l1=strlen(sir1+1);
k=0;
for(int i=2;i<=l1;i++)
{
while(k>0 && sir1[i]!=sir1[k+1]) k=d[k];
if(sir1[i]==sir1[k+1]) k++;
d[i]=k;
}
l2=strlen(sir2+1);
k=0;
for(int i=1;i<=l2;i++)
{
while(k>0 && sir2[i]!=sir1[k+1]) k=d[k];
if(sir2[i]==sir1[k+1]) k++;
if(k==l1)
{
sol++;
k=d[k];
if(sol<=1000) v[sol]=i-l1;
}
}
printf("%d\n",sol);
sol=min(sol,1000);
for(int i=1;i<=sol;i++)
printf("%d ",v[i]);
return 0;
}