Pagini recente » Cod sursa (job #2489253) | Cod sursa (job #758136) | Cod sursa (job #1850818) | Cod sursa (job #266548) | Cod sursa (job #2932085)
#include <iostream>
#include <cstring>
#include <fstream>
#include <vector>
#define MAX 2000005
using namespace std;
char a[MAX],b[MAX];
int p[MAX],n,m;
vector<int> sol;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
int main()
{
fin >> a+1; n = strlen(a+1);
fin >> b+1; m = strlen(b+1);
int l = 0;
for(int i = 2; i <= n; i++){
while(l != 0 && a[i] != a[l+1]){
l = p[l];
}
if(a[i] == a[l+1]){
l++;
}
p[i] = l;
}
l = 0;
for(int i = 1; i <= m; i++){
while(l != 0 && b[i] != a[l+1]){
l = p[l];
}
if(b[i] == a[l+1]){
l++;
}
if(l == n){
if(sol.size() < 1000){
sol.push_back(i-n);
}
l = p[l];
}
}
fout << sol.size() << "\n";
for(auto it: sol){
fout << it << " ";
}
return 0;
}