[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher - A - Number Sequence

[题目]kuangbin带你飞KMP A

思路

模板题,注意尽量用scanf输入,直接cin会超时,这里我取消了同步。

AC代码

#include<iostream>
using namespace std;
const int MAXN=10000002;

int P[MAXN];
int T[MAXN];
int NEXT[MAXN];
int plen,tlen;
void getNEXT(){
    int k,j;
    k = -1;j = 0;NEXT[0] = -1;
    while(j<plen){
        if(k==-1||P[k] == P[j]){
            NEXT[++j] = ++k; 
            if(P[j] == P[k]){
                NEXT[j] = NEXT[k];
            }
        }else{
            k=NEXT[k];
        }
    }
    
}



int KMP_Count(){
    int ans = 0;
    int i = 0;
    int j = 0;
    while(i<tlen){
        if(j==-1||T[i] == P[j]){
            i++;
            j++;
//          cout<<"j = "<<j<<endl;      
        }else
        {
            j = NEXT[j];
        }
        if(j == plen){
            ans ++;
            j = NEXT[j];
        }
    }
    return ans;
}


int KMP_Index()
{
    int i = 0, j = 0;
    getNEXT();

    while(i < tlen && j < plen)
    {
        if(j == -1 || T[i] == P[j])
        {
            i++; j++;
        }
        else
            j = NEXT[j];
    }
    if(j == plen)
        return i - plen;
    else
        return -1;
}

int main(){
    
    ios::sync_with_stdio(false);
    int TT;
    cin>>TT;
    while(TT--){
        int N,M;
        cin>>N>>M;
        for(int i = 0 ;i<N;i++){
            cin>>T[i];
        } 
        for(int i = 0 ; i < M ; i++){
            cin>>P[i];
        }
        tlen = N;
        plen = M;
        int ans;
        ans=KMP_Index();
        if(ans==-1) 
            cout<<ans<<"\n";
        else cout<<ans+1<<"\n";
         
        
    }
        
    return 0;
} 
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,169评论 25 709
  • 天边的天边 是太阳也去不到的地方 那里,我埋了一个宝藏 只有你才能寻得到 记住 在七月七日这一天 当天空下起了暴雨...
    云牧1阅读 1,549评论 0 2
  • 这应该是我第一次没有在简书按时提交作业,被罚了50元,想来,我原是可以按时完成的,前一天晚上,组长三次发来消息提醒...
    丁美华阅读 1,202评论 0 0
  • 文/心雨 走过春秋,步入冬天的栅栏 苍苍的蒹葭,花絮飘摇 多像母亲的白发 没有一丝掺杂 暖阳中,风儿吹着她 眯起眼...
    心雨挥洒阅读 2,967评论 7 8
  • 十二月第一篇。 美人们迫切要翘臀,所以盯上了深蹲,看似简单的一个问题“老师深蹲怎么做”,我得专门写篇文章,你们就知...
    大树磕宝阅读 5,346评论 2 12

友情链接更多精彩内容