Pagini recente » Cod sursa (job #51098) | Cod sursa (job #217898) | Cod sursa (job #1377183) | Cod sursa (job #2560007) | Cod sursa (job #755428)
Cod sursa(job #755428)
#include<cstdio>
#include<cstring>
char a[2000005];
char b[2000005];
int t[2000005];
int la;
int ans[1005];
int ansnr;
void mkt()
{
int p=2;
int c=0;
t[0]=-1;
t[1]=0;
while(p<la){
if(a[p-1]==a[c])
c++,t[p]=c,p++;
else if(c)
c=t[c];
else
t[p]=0,p++;
}
}
int main()
{
freopen ("strmatch.in","r",stdin);
freopen ("strmatch.out","w",stdout);
gets (a);
gets (b);
int m=0,i=0,lb=strlen (b);
la=strlen (a);
mkt();
while(m+i<lb){
if(a[i]==b[m+i]){
if(i==la-1){
if(ansnr<1000)
ans[ansnr++]=m+1;
m+=i-t[i];
i=-1;
}
i++;
} else {
m+=i-t[i];
if(t[i]>-1)
i=t[i];
else
i=0;
}
}
printf ("%d\n",ansnr);
if(ansnr>1000)
ansnr=1000;
for(int i=0;i<ansnr;i++)
printf ("%d ",ans[i]);
return 0;
}