Pagini recente » Borderou de evaluare (job #1036211) | Cod sursa (job #2139570) | Cod sursa (job #1656814) | Cod sursa (job #2950409) | Cod sursa (job #3163463)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
#define nmax
int pi[2000000];
vector <int> v;
int main() {
string a, b, s;
ifstream cin("strmatch.in");
ofstream cout("ofstream.out");
int i, k;
cin >> a >> b;
k = 0;
s = a + '#' + b;
for( i = 1; i < s.size(); i++ ) {
while( k != 0 && s[k] != s[i] )
k = pi[k-1];
if( s[k] == s[i] )
k++;
pi[i] = k;
//cout << k << " ";
if( k == a.size() )
v.push_back( i - 2*a.size() );
}
//cout < "\n";
cout << v.size() << "\n";
for( i = 0; i < v.size(); i++ )
cout << v[i] << " ";
return 0;
}