Pagini recente » Cod sursa (job #2707491) | Cod sursa (job #2633824) | Cod sursa (job #2346428) | Cod sursa (job #206219) | Cod sursa (job #2909839)
#include <bits/stdc++.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
const int N = 2e6;
char A[N + 5], B[N + 5];
int p[N + 5], solutii[1005], t;
int main()
{
f >> A + 1 >> B + 1;
int n = strlen(A + 1), m = strlen(B + 1);
int q = 0;
for (int i = 2; i <= n; i++){
while (q > 0 && A[i] != A[q + 1]) q = p[q];
if (A[i] == A[q + 1])q++;
p[i] = q;
}
//for (int i = 1; i <= n; i++) cout << p[i] << ' ';
q = 0;
for (int i = 1; i <= m; i++)
{
while (q > 0 && A[q + 1] != B[i]) q = p[q];
if (B[i] == A[q + 1]) q++;
if (q == n){
t++;
if(t <= 1000) solutii[t] = i - n;
}
}
g << t << '\n';
if(t > 1000) t = 1000;
for (int i = 1; i <= t; i++) g << solutii[i] << ' ';
return 0;
}