Pagini recente » Cod sursa (job #2165641) | Cod sursa (job #1967385) | Borderou de evaluare (job #2079721) | Borderou de evaluare (job #1919005) | Cod sursa (job #1451603)
#include<bits/stdc++.h>
using namespace std;
int i,pref[2000005],n,m,nr,rs[1005],k;
string a,b;
int main()
{
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
ios_base::sync_with_stdio(0);
getline(cin,a); n=a.length();
getline(cin,b); m=b.length();
for(i=1;i<n;++i)
{
while(k && a[i]!=a[k]) k=pref[k-1];
if(a[i]==a[k]) ++k;
pref[i]=k;
}
for(k=i=0;i<m;++i)
{
while(k && b[i]!=a[k]) k=pref[k-1];
if(a[k]==b[i]) ++k;
if(k==n)
{
++nr; k=pref[k-1];
if(nr<=1000) rs[nr]=i-n+1;
}
}
cout<<nr<<'\n'; nr=min(nr,1000);
for(i=1;i<=nr;++i) cout<<rs[i]<<" \n"[i==nr];
return 0;
}