Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <iostream>
- #include <sstream>
- #include <string>
- #include <vector>
- #include <queue>
- #include <set>
- #include <map>
- #include <cstdio>
- #include <cstdlib>
- #include <cctype>
- #include <cmath>
- #include <numeric>
- using namespace std;
- int main() {
- for ( ; ; ) {
- if ( cin.peek() == -1 ) break;
- int len;
- cin >> len;
- char *p = new char[len+1];
- int *olap = new int[len+2];
- scanf( "%s", p );
- olap[0] = -1;
- for (int i = 0; p[i] != '\0'; i++) {
- olap[i+1] = olap[i]+1;
- while ( olap[i+1] > 0 && p[i] != p[olap[i+1] - 1] ) {
- olap[i+1] = olap[olap[i+1] - 1] + 1;
- }
- }
- int j = 0;
- char ch;
- int pos = 0;
- getchar();
- while ( (ch = getchar()) != '\n' ) {
- pos++;
- for (;;) {
- if ( ch == p[j] ) {
- j++;
- if ( j == len ) {
- cout << pos-len << endl;
- j = olap[j];
- }
- break;
- } else if (j == 0) break;
- else j = olap[j];
- }
- }
- delete p;
- delete olap;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement