Pagini recente » Cod sursa (job #1605619) | Cod sursa (job #1668148) | Cod sursa (job #588715) | Cod sursa (job #534835) | Cod sursa (job #332144)
Cod sursa(job #332144)
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2000010;
char N[maxn],M[maxn];
int i,j,m,k,ras[1005],pi[maxn],q,n;
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
fgets(N+1,sizeof(N),stdin);
fgets(M+1,sizeof(M),stdin);
q=0;
pi[1]=0;
for(i=2;N[i]!='\n'&&N[i]!=0;++i)
{
while(q&&N[q+1]!=N[i])
q=pi[q];
if(N[q+1]==N[i])
++q;
pi[i]=q;
}
n=i-1;
q=0;
for(i=1;M[i]!='\n'&&M[i]!=0;++i)
{
while(q&&N[q+1]!=M[i])
q=pi[q];
if(N[q+1]==M[i])
++q;
if(q==n)
{
q=pi[q];
++k;
if(k<=1000)
ras[k]=i-n;
}
}
printf("%d\n",k);
for(i=1;i<=min(k,1000);++i)
printf("%d ",ras[i]);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}