hdu3746 Cyclic Nacklace

来源:互联网 发布:快乐大本营测颜值软件 编辑:程序博客网 时间:2024/06/05 14:54
//题意:
//给一串珠子,在首尾处加入最少的珠子,成为循环串,循环串的循环次数大于1
//思路:首先求出一节珠子的长度,就是n = len - next[len], len为字符串长度

//然后在根据next[len]的长度求出应该补充的最小珠子数

//若next[len] 不为0,且next[len] % n = 0,则不用加入新珠子

//否则加上 n - next[len] % n个珠子

#include<iostream>using namespace std;#define MAXSIZ 100010int Next[MAXSIZ];void getNext(char * str){if (!str){return;}int i = 0, j = -1;int len = strlen(str);Next[i] = -1;while (i < len){if(j == -1 || str[i] == str[j]){++i, ++j;Next[i] = j;}else{j = Next[j];}}}int main(){int t, i, len;char str[MAXSIZ];while(scanf("%d", &t) != EOF){while(t--){scanf("%s", str);len = strlen(str);getNext(str);int n = len - Next[len]; //n 为一节珠子长度if (Next[len] != 0 && (Next[len]) % n == 0){printf("0\n");}else{int addNum = n - ((Next[len]) % n);printf("%d\n", addNum);}}}return 0;}



原创粉丝点击