Pagini recente » Cod sursa (job #576626) | Cod sursa (job #839699) | Cod sursa (job #2621771) | Cod sursa (job #2532104) | Cod sursa (job #3163453)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int main(){
cin.tie(0);ios::sync_with_stdio(0);
string s, t; fin >> s >> t;
int size1 = s.size();
s += '#';
s += t;
//cout << "Noul s = " << s << endl;
int n = s.size();
vector<int> p( s.size() );
p[0] = 0;
int k = 0;
int cnt = 0;
vector <int> poz;
for(int i = 1; i < n; i++){
while(k > 0 && s[k] != s[i]){
k = p[k - 1];
}
if(s[k] == s[i]) k++;
p[i] = k;
if(p[i] == size1){
cnt++;
poz.push_back(i - size1 + 1);
}
}
fout << cnt << endl;
for(int i = 0; i < min( int(poz.size()), 1000); i++) fout << poz[i] - size1 - 1 << " ";
fout << endl;
return 0;
}