Pagini recente » Cod sursa (job #1502077) | Cod sursa (job #2740086) | Cod sursa (job #2694130) | Cod sursa (job #580713) | Cod sursa (job #1591028)
#include<stdio.h>
#include<cstring>
#define nmax 4000001
#define ul unsigned long
char s[nmax];
ul z[nmax],n,nr,pp[1024];
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
char * p=s;
scanf("%s",p);
int k=strlen(p);
strcat(p,"$");
p=p+k+1;
scanf("%s",p);
ul n=strlen(s);
ul r=0,l=0;
for (ul i=1;i<n;i++)
{
if (i>r)
{
r=l=i;
while (r<n && s[r]==s[r-l])
r++;
z[i]=r---l;
} else
{
if (z[i-l]< r-i+1)
z[i]=z[i-l]; else
{
l=i;
while (r<n && s[r]==s[r-l])
r++;
z[i]=r---l;
}
}
}
for (ul i=k+1;i<n;i++)
if (z[i]==k && nr<1000)
pp[nr++]=i-k-1;
printf("%d\n",nr);
for (ul i=0;i<nr;i++)
printf("%d ",pp[i]);
return 0;
}