Pagini recente » Cod sursa (job #1274847) | Cod sursa (job #2497984) | Cod sursa (job #1175504) | Cod sursa (job #2085483) | Cod sursa (job #1203634)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int Z[2000005],i,N,M,nr;
char A[2000005],B[2000005];
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
gets(A+1); N=strlen(A+1);
gets(B+1); M=strlen(B+1);
int L=1,R=1;
for (i=2;i<=M;i++)
{
if (R>=i) Z[i]=min(Z[i-L+1],R-i+1);
for (;i+Z[i]<=M && B[i+Z[i]]==A[Z[i]+1];Z[i]++);
if (i+Z[i]-1>R) L=i,R=i+Z[i]-1;
if (Z[i]==N) nr++;
}
printf("%d\n",nr);
for (i=2;i<=M;i++) if (Z[i]==N) printf("%d ",i-1);
return 0;
}