Pagini recente » Cod sursa (job #2634442) | Cod sursa (job #2805469) | Cod sursa (job #1685610) | Cod sursa (job #1131235) | Cod sursa (job #2040097)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("strmatch.in");
ofstream cout ("strmatch.out");
string s , one , two;
vector < int > kmp (4000100);
vector < int > pos;
void make_s(){
cin>>one>>two;
s += ' ';
s += one;
s += '#';
s += two;
}
void solve(){
int cont = 0;
for (int i=2; i<s.size(); i++){
int last = kmp[i-1];
while (s[last + 1] != s[i] && last != 0){
last = kmp[last];
}
if (s[last + 1] == s[i]){
kmp[i] = last + 1;
if (kmp[i] == one.size()){
cont++;
if (cont <= 1000){
pos.push_back(i - 2 * one.size() - 1);
}
}
}
}
cout<<cont<<'\n';
for (auto &x : pos){
cout<<x<<" ";
}
}
int main() {
make_s();
solve();
return 0;
}