Cyclic Nacklace HDU - 3746
Posted Twsc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cyclic Nacklace HDU - 3746相关的知识,希望对你有一定的参考价值。
给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。
没有优化的next数组的应用。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #define maxn 100010 using namespace std; char p[maxn]; int nex[maxn],n; void get_nex() { int i,j; i=0,j=-1,nex[0]=-1; while(i<n) { if(j==-1||p[i]==p[j]) { i++,j++; nex[i]=j; } else j=nex[j]; } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",p); n=strlen(p); get_nex(); int c=n-nex[n];//字符串循环的长度 if(n%c==0&&nex[n]) puts("0");//如果nex[n]==0的话,那么字符串循环的长度与原串相等,那么需要添加n个长度 else printf("%d\n",c-(n%c)); } return 0; }
以上是关于Cyclic Nacklace HDU - 3746的主要内容,如果未能解决你的问题,请参考以下文章