Pagini recente » Cod sursa (job #1207453) | Cod sursa (job #1456217) | Cod sursa (job #2488571) | Cod sursa (job #1207452) | Cod sursa (job #1749122)
#include <cstdio>
#include<string.h>
#define MAXN 2000000
#define MAXR 1000
char s[2*MAXN+2];
int n, z[2*MAXN+2], m, rasp[MAXR+1], k;
int main()
{
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
int i, l, r;
gets(s), n=strlen(s);
s[n]='#';
gets(s+n+1), m=strlen(s);
l=r=0;
for(i=1;i<=m;++i)
{
if(i>r)
{
l=r=i;
while(r<=m && s[r]==s[r-l]) ++r;
z[i]=r-l, --r;
}
else
{
if(z[i-l] < r-i+1) z[i]=z[i-l];
else
{
l=i;
while(r<=m && s[r]==s[r-l]) ++r;
z[i]=r-l, --r;
}
}
}
for(i=n+1;i<=m;++i)
if(z[i] == n)
{
k++;
if(k<=MAXR)
rasp[k]=i-n-1;
}
printf("%d\n", k);
for(i=1;i<=MAXR && i<=k;++i)
printf("%d ", rasp[i]);
return 0;
}