Pagini recente » Cod sursa (job #1981254) | Cod sursa (job #2712434) | Cod sursa (job #659549) | Cod sursa (job #1980013) | Cod sursa (job #2365604)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream cin ("strmatch.in");
ofstream cout ("strmatch.out");
int n, m, cnt;
char a[2000005], b[2000005];
int v[2000005];
vector <int> sol;
int main() {
cin >> (a + 1) >> (b + 1);
n = strlen(a + 1); m = strlen(b + 1);
int j = 0;
for(int i = 2; i <= n; i++) {
while(j && a[j + 1] != a[i])
j = v[j];
if(a[j + 1] == a[i])
j++;
v[i] = j;
}
j = 0;
for(int i = 1; i <= m; i++) {
while(j && a[j + 1] != b[i])
j = v[j];
if(a[j + 1] == b[i])
j++;
if(j == n) {
cnt++;
if(cnt <= 1000)
sol.push_back(i - n);
}
}
cout << cnt << "\n";
for(auto i : sol)
cout << i << " ";
return 0;
}