Pagini recente » Cod sursa (job #3151410) | Cod sursa (job #184690) | Cod sursa (job #1445453) | Cod sursa (job #2739499) | Cod sursa (job #1218160)
#include<fstream>
#include<vector>
#include<string>
using namespace std;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
string s,p,t;
int n,m,z[4000000],k=0,sol[2000000];
int main()
{
getline(cin,p);
getline(cin,t);
s=p+'*'+t;
int n=s.size();
for (int i=1,l=0,r=0;i<n;i++)
{
if (i<=r)
z[i]=min(z[i-l],r-i+1);
while (i+z[i]<n && s[z[i]]==s[z[i]+i]) ++z[i];
if (i+z[i]-1>r)
l=i, r=i+z[i]-1;
}
for (int i=0;i<t.size();i++)
if (z[i+p.size()+1]==p.size())
sol[++k]=i;
cout<<k<<"\n";
for (int i=1;i<=min(k,1000);i++) cout<<sol[i]<<" ";
return 0;
}