Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Task : KMP
- Author : Phumipat C. [MAGCARI]
- Language: C++
- Created : 01 February 2023 [20:10]
- */
- #include<bits/stdc++.h>
- using namespace std;
- char a[10000010],b[5000010];
- int kmp[5000010];
- int main(){
- int lenb;
- scanf("%d %s",&lenb,b+1);
- for(int i=1;i<=lenb;i++)
- a[i] = a[lenb+i] = b[i];
- int lena = 2*lenb;
- // preprocess
- int j=0;
- for(int i=2;i<=lenb;i++){
- while(j>0 && b[j+1] != b[i]) j=kmp[j];
- if(b[j+1] == b[i]) j++;
- kmp[i]=j;
- }
- // search
- j=0;
- for(int i=2;i<=lena;i++){
- while(j>0 && b[j+1] != a[i]) j=kmp[j];
- if(b[j+1] == a[i]) j++;
- if(j == lenb){
- printf("%d\n",i-lenb);
- return 0;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement