HDU 3746 Cyclic Nacklace kmp处理字符串

来源:互联网 发布:php web 文件上传 编辑:程序博客网 时间:2024/06/06 02:50
题意大致是说给你不同颜色的串珠,颜色用字母表示,之后让他形成一个环,循环至少两次,问至少需要加入几个串珠使之成立。
AC代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int MAX=1e5+10;int Next[MAX];int N,ans;char str[MAX] ;int str_len;void kmp_next(char str[],int Next[]){Next[0]=0;for(int i=1;i<str_len;i++){int k=Next[i-1];while(k!=0&&str[i]!=str[k])   k=Next[k-1];if(str[i]==str[k]) Next[i]=k+1;else Next[i]=0;}}int main(){    scanf("%d",&N);while(N--){memset(Next,0,sizeof(Next));scanf("%s",str);str_len=strlen(str);kmp_next(str,Next);int t=str_len-Next[str_len-1];//循环的长度if(Next[str_len-1]%t==0&&Next[str_len-1]!=0) ans=0;//例如aaa 可以多次循环else ans=t-(Next[str_len-1]%t);//例如abca 取余就是记录了后面循环的个数这里只有一个循环字母aprintf("%d\n",ans);}return 0;}
点击打开题目链接

原创粉丝点击