Pagini recente » Cod sursa (job #1212033) | Cod sursa (job #2035060) | Cod sursa (job #20390) | Cod sursa (job #1764997) | Cod sursa (job #1804502)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s[4000005];
int pi[4000005], sol[2000005];
void prefix(char* w, int *v, int n){
int x = 0;
for (int i = 2; i < n; i ++){
while (w[x + 1] != w[i] && x != 0)
x = v[x];
if (w[i] == w[x + 1])
x ++;
v[i] = x;
}
}
int main(){
freopen("strmatch.in", "r", stdin);
freopen("strmatch.out", "w", stdout);
scanf("%s", s + 1);
int n = strlen(s + 1);
s[n + 1] = '*';
scanf("%s", s + n + 2);
int m = strlen(s + 1);
prefix(s, pi, m);
int count = 0;
for (int i = n + 2; i < m; i ++)
if (pi[i] == n)
sol[++count] = i - 2 * n - 1;
printf("%d\n", count);
for (int i = 1; i <= min(1000, count); i ++)
printf("%d ", sol[i]);
return 0;
}