1. 程式人生 > >POJ 3461 Oulipo (KMP)

POJ 3461 Oulipo (KMP)

next() http problem spa har org include -- ostream

傳送門

題目大意

有n次詢問,問W串在T串中出現的次數

題解

KMP

代碼

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,lenw,lent,nxt[10009];
char w[10009],t[1000009];
void getnext(){
    for(int i=2,j=0;i<=lenw;i++){
        while(w[i]!=w[j+1]&&j)j=nxt[j];
        if(w[i]==w[j+1])nxt[i]=++j;
    }
}
int kmp(){ int js=0; for(int i=1,j=0;i<=lent;i++){ while(t[i]!=w[j+1]&&j)j=nxt[j]; if(t[i]==w[j+1])j++; if(j==lenw){js++;j=nxt[lenw];} } return js; } int main(){ scanf("%d",&n); while(n--){ scanf("%s\n%s",w+1,t+1); lenw=strlen(w+1
);lent=strlen(t+1); getnext(); printf("%d\n",kmp()); } return 0; }

POJ 3461 Oulipo (KMP)