Pagini recente » Cod sursa (job #1817724) | Cod sursa (job #875348) | Cod sursa (job #1845933) | Cod sursa (job #3176642) | Cod sursa (job #2781188)
#include<cstdio>
#include<cstring>
typedef unsigned long long L;
const int U=2000001,V=1000,B=29;
int m[V],r,N,M,i,l;
char b[U];
L C=1,H,R;
int main()
{
freopen("strmatch.in","r",stdin),freopen("strmatch.out","w",stdout),
scanf("%s",b),M=strlen(b);
for(i=1;i<=M;++i)
C*=B;
for(i=0;i<M;++i)
H=H*B+b[i];
scanf("%s",b),N=strlen(b);
if(N<M) {
puts("0");
return 0;
}
for(i=0;i<M;++i)
R=R*B+b[i];
for(i=M;;++i) {
if(R==H) {
if(r<V)
m[r]=i-M;
++r;
}
if(i==N)
break;
R=R*B+b[i]-b[i-M]*B;
}
printf("%d\n",r);
for(i=0,l=(r<V?r:V);i<l;++i)
printf("%d ",m[i]);
return 0;
}