Files
luogu/P3375.cpp
T
hanyixuanten 6648c1c279
Check cpp / md pair / Check md headers (push) Successful in 4s
new file: P3375.cpp
2026-10-28 10:29:58 +00:00

34 lines
762 B
C++

#include<bits/stdc++.h>
using namespace std;
char s1[1000006], s2[1000006];
int n1, n2;
int nxt[1000006];
void gnext() {
for(int i = 2; i <= n2; ++i) {
int j = nxt[i - 1];
while(j > 0 && s2[j + 1] != s2[i]) j = nxt[j];
if(s2[j + 1] == s2[i]) j++;
nxt[i] = j;
}
}
void f() {
int j = 0;
for(int i = 1; i <= n1; ++i) {
while(j > 0 && s2[j + 1] != s1[i]) j = nxt[j];
if(s2[j + 1] == s1[i]) j++;
if(j == n2) {
printf("%d\n", i - n2 + 1);
j = nxt[j];
}
}
}
int main() {
scanf("%s%s", s1 + 1, s2 + 1);
n1 = strlen(s1 + 1), n2 = strlen(s2 + 1);
gnext();
f();
for(int i = 1; i <= n2; ++i) {
printf("%d ", nxt[i]);
}
return 0;
}