Pagini recente » Cod sursa (job #1614393) | Cod sursa (job #372051) | Cod sursa (job #2789245) | Cod sursa (job #609047) | Cod sursa (job #481967)
Cod sursa(job #481967)
#include<algorithm>
using namespace std;
#define DIM 2000005
#define DIM2 1005
char a[DIM],b[DIM];
int n,m,prefix[DIM],sol[DIM2],vf;
void kmp ()
{
int i,q;
for(q=0,i=2;i<=n;++i)
{
while(q>0 && a[q+1]!=a[i])
q=prefix[q];
if(a[q+1]==a[i])
++q;
prefix[i]=q;
}
for(q=0,i=1;i<=m;++i)
{
while(q>0 && a[q+1]!=b[i])
q=prefix[q];
if(a[q+1]==b[i])
++q;
if(q==n)
{
sol[vf=min(++vf,1001)]=i-n;
q=prefix[q];
}
}
vf=min(vf,1000);
}
void show ()
{
int i;
printf("%d\n",vf);
for(i=1;i<=vf;++i)
printf("%d ",sol[i]);
}
int main ()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
gets (1+a);
n=strlen(1+a);
gets (1+b);
m=strlen(1+b);
kmp ();
show ();
return 0;
}