Periodic Strings UVA

来源:互联网 发布:便宜域名注册 编辑:程序博客网 时间:2024/05/16 05:43

https://vjudge.net/contest/192890#problem/B

题意: 问你循环节长度。

思路:还是nex数组的简单应用,首先要是有循环节的话就直接输出len-nex[len],没有就输出len 水题(天天也就能刷刷水题了  T _ T)..

上代码吧:

#include <stdio.h>#include <string.h>char ch[1000];int nex[1000];void pre_kmp(){memset(nex,0,sizeof(nex));int len = strlen(ch) , i = 0 , k = -1;nex[0] = -1;while(i<len){if(k == -1 ||ch[i] == ch[k]){i++,k++;nex[i] = k;}else {k = nex[k];}}}int main(){int t;scanf("%d",&t);while(t--){scanf("%s",ch);int len = strlen(ch);pre_kmp();if(len % (len - nex[len])==0){printf("%d\n",len-nex[len]);}else {printf("%d\n",len);}if(t){puts("");}}}/*2abcabcabcHoHoHo*/



原创粉丝点击