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