[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher D HDU 3746

来源:互联网 发布:双程网络剧百度云网盘 编辑:程序博客网 时间:2024/05/16 12:10

题目地址:https://vjudge.net/contest/70325#problem/D

思路:利用NEXT数组求循环节。

AC代码:

#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn=100000+10;int tlen,caset;char t[maxn];int Next[maxn];void getNext(){    int j,k;    j=0,k=-1,Next[0]=-1;    while(j<tlen)    {        if(k==-1 || t[j]==t[k])            Next[++j]=++k;        else            k=Next[k];    }}int main(){    scanf("%d",&caset);    while(caset--)    {        scanf("%s",t);        tlen=strlen(t);        getNext();        int ans=tlen-Next[tlen];        if(tlen%ans==0 && tlen!=ans)            printf("0\n");        else            printf("%d\n",ans-Next[tlen]%ans);    }}


0 0
原创粉丝点击