Pagini recente » Cod sursa (job #1987017) | Cod sursa (job #478457) | Cod sursa (job #2985132) | Cod sursa (job #2505178) | Cod sursa (job #1119878)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int nmax = 2000005;
int n,m,i,q,pi[nmax],sol[nmax],cnt;
char a[nmax],b[nmax];
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
scanf("%s",a+1); n=strlen(a+1);
scanf("%s",b+1); m=strlen(b+1);
for(i=2;i<=n;i++)
{
while(q && a[q+1]!=a[i]) q=pi[q];
if(a[q+1]==a[i]) q++;
pi[i]=q;
}
for(q=0,i=1;i<=m;i++)
{
while(q && a[q+1]!=b[i]) q=pi[q];
if(a[q+1]==b[i]) q++;
if(q==n && ++cnt<=1000) sol[cnt]=i-n;
}
printf("%d\n",cnt);
for(i=1;i<=min(n,cnt);i++) printf("%d ",sol[i]);
return 0;
}