Pagini recente » Cod sursa (job #232595) | Cod sursa (job #3032561) | Cod sursa (job #3172380) | Cod sursa (job #1793650) | Cod sursa (job #2293265)
#include <bits/stdc++.h>
using namespace std;
int v[2000010],i,j,ans[2000010],nr,n,m,l,a;
char s1[2000010],s2[2000010];
int main()
{
ifstream cin ("strmatch.in");
ofstream cout ("strmatch.out");
cin>>s1>>s2;
n=strlen(s1);
i=0;
for(j=1; j<n; ++j)
{
while(s1[i]!=s1[j]&&i>0)i=v[i-1];
if(s1[i]==s1[j])v[j]=i+1,++i;
else v[j]=0;
}
m=strlen(s2);
i=0;
for(j=0; j<m; ++j)
{
while(s2[j]!=s1[i]&&i>0)i=v[i-1];
if(s1[i]==s2[j])l=i+1,++i;
if(l==n)
{
nr++;
if(nr<=1000)ans[nr]=j;
}
}
cout<<nr<<'\n';
for(i=1; i<=min(nr,1000); ++i)
cout<<ans[i]-n+1<<" ";
return 0;
}