Pagini recente » Cod sursa (job #1858086) | Cod sursa (job #341890) | Cod sursa (job #1276246) | Cod sursa (job #1013524) | Cod sursa (job #2402672)
#include <fstream>
#include <vector>
const int NMAX=4000000;
using namespace std;
int k[NMAX+5];
vector <int> v;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
int main()
{
string a,b,s;
cin>>a>>b;
s="?"+a;
s+="#";
s+=b;
for(int i=2; i<(int)s.size(); ++i)
{
int q=k[i-1];
while(q && s[i]!=s[q+1])
q=k[q];
if(s[q+1]==s[i])
++q;
k[i]=q;
}
int cnt=0;
for(int i=1; i<(int)s.size(); ++i)
{
if(k[i]==(int)a.size())
{
cnt++;
if(cnt<=1000)
v.push_back(i-2*a.size()-1);
}
}
cout<<cnt<<'\n';
for( auto x: v)
cout<<x<<" ";
return 0;
}