Number Sequence HDU - 1711(KMP模板)

    科技2024-07-07  74

    Number Sequence HDU - 1711 (kmp模板题)

    题意&&思路:

    模板题,不再赘述。 匹配数字串,输出最先匹配的一个位置。

    AC

    #include <iostream> #include <cstdio> #define foR(i,x,y) for(int i=(x); i<y; i++) #define For(i,x,y) for(int i=(x); i<=(y); i++) using namespace std; const int maxn=1e6+10; const int maxm=1e4+10; int s[maxn],p[maxm]; int n,m,nxt[maxm]; void getnxt(int *p){ int i=0,j=-1; nxt[0]=-1; while(i<m){ if(j==-1||p[i]==p[j])nxt[++i]=++j; else j=nxt[j]; } } int kmp(){ int i=0, j=0; while(i<n){ if(j==-1||s[i]==p[j])i++,j++; else j=nxt[j]; //cout<<"i---j---"; //cout<<i<<' '<<j<<endl; if(j==m)return i-m+1; } return -1; } int main() { ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int tt;cin>>tt; while(tt--){ cin>>n>>m; foR(i,0,n)cin>>s[i]; foR(i,0,m)cin>>p[i]; getnxt(p); cout<<kmp()<<endl; } return 0; }
    Processed: 0.009, SQL: 8