#include <iostream> #include <cstdio> #include <cstring> #define MAX_LEN1 (1000000 + 5) #define MAX_LEN2 (1000000 + 5) using namespace std; int len1, len2; char s1[MAX_LEN1], s2[MAX_LEN2]; int nxt[MAX_LEN2]; void Init() { nxt[1] = 0; for(int i = 1, j = 0; i < len2; ++i) { while(j && s2[i + 1] != s2[j + 1]) j = nxt[j]; if(s2[i + 1] == s2[j + 1]) ++j; nxt[i + 1] = j; } return; } void KMP() { for(int i = 0, j = 0; i < len1; ++i) { while(j && s1[i + 1] != s2[j + 1]) j = nxt[j]; if(s1[i + 1] == s2[j + 1]) ++j; if(j == len2) printf("%d\n", i - len2 + 2), j = nxt[j]; } return; } int main() { // program... return 0; }