Pagini recente » Cod sursa (job #2688308) | Cod sursa (job #2531238) | Cod sursa (job #2346748) | Cod sursa (job #1859012) | Cod sursa (job #2653538)
#include <bits/stdc++.h>
using namespace std;
ifstream in("strmatch.in");
ofstream out("strmatch.out");
string s;
string a, b;
unsigned int p[4000000 + 7];
int main()
{
in >> a >> b; s = '*' + a + '*' + b;
unsigned int k = 0;
for(unsigned int i = 2; i < s.size(); i++)
{
while(k > 0 && s[k+1] != s[i])
k = p[k];
if(s[k+1] == s[i])
k++;
p[i] = k;
}
int nr_ap = 0;
for(unsigned int i = 0; i < s.size(); i++)
{
//cout << p[i] << endl;
if(p[i] == a.size())
nr_ap++;
}
out << nr_ap << endl;
for(unsigned int i = 0; i < s.size(); i++)
{
if(p[i] == a.size())
out << i - 1 - 2*a.size() << " ";
}
}