洛谷 P4391 [BOI2009]Radio Transmission 无线传输(KMP)

洛谷 P4391 [BOI2009]Radio Transmission 无线传输(KMP) 

假设字串长度为 x,字符串从 1 开始计数

next[1]=next[2]=……next[x]=0 next[x+1]=1 next[x+n]=n 发现从 x+1 位置开始,next 数组逐渐递增 1

所以答案为 n-next[n] 

const int N=1e6+5;

    int n,m;
    int i,j,k;
    char a[N];
    int f[N];

void getfail(char *s)
{
    int len=strlen(s);
    f[0]=f[1]=0;
    for(int i=1;i<len;i++){
        int j=f[i];
        while(j && s[i]!=s[j]) j=f[j];
        if(s[j]==s[i]) f[i+1]=j+1;
        else f[i+1]=0;
    }
}

int main()
{
    //IOS;
    while(~sd(n)){
        ss(a+1);
        getfail(a+1);
        pd(n-f[n]);
    }
    //PAUSE;
    return 0;
}

 

上一篇:mysql时间截取函数和实现数据累加


下一篇:樱花(阶乘约数个数