Pagini recente » Cod sursa (job #594069) | Diferente pentru home intre reviziile 329 si 330 | Cod sursa (job #169845) | Diferente pentru autumn-warmup-2007/solutii/runda-2 intre reviziile 3 si 56 | Cod sursa (job #1203656)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int Z[4000005],i,N,M,nr,sol[1010];
char S[4000005];
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
gets(S+1); N=strlen(S+1);
gets(S+N+1); M=strlen(S+N+1);
int L=1,R=1;
for (i=2;i<=N+M;i++)
{
if (R>=i) Z[i]=min(Z[i-L+1],R-i+1);
for (;i+Z[i]<=N+M && S[i+Z[i]]==S[Z[i]+1];Z[i]++);
if (i+Z[i]-1>R) L=i,R=i+Z[i]-1;
if (Z[i]>=N && i>N)
{
nr++;
if (nr<=1000) sol[nr]=i-N-1;
}
}
printf("%d\n",nr);
nr=min(nr,1000);
for (i=1;i<=nr;i++) printf("%d ",sol[i]);
return 0;
}