P4391 [BOI2009] Radio Transmission 无线传输

原题链接

题解

KMP算法的应用。

我们知道KMP算法中NEXT数组是当前位置除外的最大前后缀长度。

直接抛出结论:ans=cnt-Next[n]

证明过程

code

 

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int Next[N];
string s;
void NEXT(){
    int cnt=s.size();
    if (cnt==1){
        Next[0]=-1;
        return;
    }
    Next[0]=-1;
    Next[1]=0;
    int i=1,cn=0;
    while (i<cnt){
        if (s[i]==s[cn]) Next[++i]=++cn;
        else if (cn!=0) cn=Next[cn];
        else Next[++i]=cn;
    }
}
int main(){
    int l;
    cin>>l;
    cin>>s;
    int cnt=s.size();
    NEXT();
    cout<<cnt-Next[cnt]<<endl;
    return 0;
}

 

posted @ 2024-05-03 18:17  黑屿白  阅读(1)  评论(0编辑  收藏  举报