HDU 3476 Cyclic Nacklace(next数组应用)

来源:互联网 发布:冬瓜影视软件下载 编辑:程序博客网 时间:2024/06/16 20:22







http://acm.hdu.edu.cn/showproblem.php?pid=3746








题目大意:

给你一个串   问添至少加多少个字符使这个串变成循环的








分析:

next数组的简单应用       求出next数组后        如果next[len-1]==-1      要添加字符就是整个串         然后求一下循环节就好了    看一下是不是多次循环的     












AC代码:

#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <vector>#include <stack>#include <queue>#include <map>#include <set>#include<list>#include <bitset>#include <climits>#include <algorithm>#define gcd(a,b) __gcd(a,b)#define mset(a,n) memset(a,n,sizeof(a))#define FINfreopen("input.txt","r",stdin)#define FOUT freopen("output.txt","w",stdout)typedef long long LL;const LL mod=1e9+7;const int INF=0x3f3f3f3f;const double PI=acos(-1.0);using namespace std;int Next[1000010];char str[1000010];void get_Next(char *str,int &n){    n=strlen(str);    int j=-1;    Next[0]=-1;    for (int i=1;i<n;i++){        while (j>=0&&str[i]!=str[j+1]) j=Next[j];        if (str[i]==str[j+1]) j++;        Next[i]=j;    }}int main (){int t;scanf ("%d",&t);     while (t--){ int len;     scanf("%s",str);     get_Next(str,len);    int length=len-(Next[len-1]+1);//    求出循环节长度     if (Next[len-1]==-1) printf ("%d\n",len);    else if (len%length==0) printf ("0\n");//    循环多次     else printf ("%d\n",length-len%length);//    要添加的字符个数使其循环多次     }    return 0;}


阅读全文
0 0
原创粉丝点击