Advertisement
MAGCARI

Timer Switch

Feb 1st, 2023
622
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.62 KB | None | 0 0
  1. /*
  2.     Task    : KMP
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 01 February 2023 [20:10]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. char a[10000010],b[5000010];
  10. int kmp[5000010];
  11. int main(){
  12.     int lenb;
  13.     scanf("%d %s",&lenb,b+1);
  14.     for(int i=1;i<=lenb;i++)
  15.         a[i] = a[lenb+i] = b[i];
  16.     int lena = 2*lenb;
  17.     // preprocess
  18.     int j=0;
  19.     for(int i=2;i<=lenb;i++){
  20.         while(j>0 && b[j+1] != b[i])    j=kmp[j];
  21.         if(b[j+1] == b[i])  j++;
  22.         kmp[i]=j;
  23.     }
  24.  
  25.     // search
  26.     j=0;
  27.     for(int i=2;i<=lena;i++){
  28.         while(j>0 && b[j+1] != a[i])    j=kmp[j];
  29.         if(b[j+1] == a[i])  j++;
  30.         if(j == lenb){
  31.             printf("%d\n",i-lenb);
  32.             return 0;
  33.         }
  34.     }
  35.     return 0;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement