通过这题得出了一个很重要的结论,在用kmp算法求出next数组后,len-next[len]的值就是该字符串的最小循环节,该字符串的其他循环节都是它的倍数,如果len恰好是len-next[len]的整数倍,那么该字符串就是个power string;如果next[len]为0,表示该字符串是非循环的;否则,按照len-next[len]的循环节,补齐最后一个循环节即为使该字符串成为power string的最小添加字符个数

思路:kmp+字符串的最小循环节问题

分析:
1 题目要求的是给定一个字符串,问我们还需要添加几个字符可以构成一个由n个循环节组成的字符串。
2 可知我们应该先求出字符串的最小循环节的长度:假设字符串的长度为len,那么最小的循环节就是t = len-next[len] ; 如果有len%t == 0,那么这个字符串就是已经是完美的字符串,不用添加任何字符;如果不是完美的那么需要添加的字符数就是cir - (len-(len/t)*t)),相当与需要在最后一个循环节上面添加几个。
3 如果t = 1,说明字符串只有一种字符例如“aaa” ; 如果t = m说明最小的循环节长度为m,那么至少还需m个;如果m%t == 0,说明已经不用添加了。

#include<stdio.h>
#include<string.h>
int next[100005];
char str[100005];
int len;
void getnext()
{int i,j=0;next[1]=0;for(i=2;i<=len;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 i,j,t,n;scanf("%d",&n);while(n--){  scanf("%s",str+1);len=strlen(str+1);memset(next,0,sizeof(next));getnext();t=len-next[len];if(t!=len&&len%t==0)puts("0");elseprintf("%d\n",t-next[len]%t);}return 0;
}

字符串周期--hdu 3746 Cyclic Nacklace相关推荐

  1. hdu 3746 Cyclic Nacklace

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 思路:KMP中Next数组的应用,求出最小的循环节,题目的意思是只能在字符串的后面上添加新的字符 ...

  2. @hdu - 3746@ Cyclic Nacklace

    目录 @description@ @solution@ @code@ @details@ @description@ 给你一个长度为 n 的由小写字母组成的字符串,让你在末尾增加尽量少的字母,使它变为 ...

  3. HDU - 3746 Cyclic Nacklace(KMP的next数组判循环节)

    题目链接:点击查看 题目大意:现在规定想要制作一串珍珠手链,需要用到两段一模一样的字符串首位相接而成,现在给定一个字符串,问最少需要添加几个珍珠才能满足条件 题目分析:一开始以为是个简单的模拟题,但后 ...

  4. 【HDU - 3746 】Cyclic Nacklace (KMP,最小循环节问题)

    题干: CC always becomes very depressed at the end of this month, he has checked his credit card yester ...

  5. HDU - Cyclic Nacklace(KMP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  6. 相遇周期 HDU - 1713

    2007年3月26日,在中俄两国元首的见证下,中国国家航天局局长孙来燕与俄罗斯联邦航天局局长别尔米诺夫共同签署了<中国国家航天局和俄罗斯联邦航天局关于联合探测火星-火卫一合作的协议>,确定 ...

  7. G - 相遇周期 HDU - 1713

    添加链接描述 我们的问题是已知两颗卫星的运行周期,求它们的相遇周期. Input 输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据包含两组正整数,用空格隔开. ...

  8. HDU 1853 Cyclic Tour

    HDU_1853 首先,如果要保证图有环,并且环之间没有交点的话,那么必然每个点的出度和入度都应为1,因此我们可以把一个点拆成两个点,分别表示出度及入度,然后去找拆点后构成的二分图的完美匹配. 对于怎 ...

  9. hdu 3746 kmp求循环节 下标从1开始

    长度为m[1,2...m]的模式的循环节为 m-next[m] , aaa  循环节clc为1  (clc=m-next[m]= 3-2  =1)       此时   m%clc == 0   表示 ...

最新文章

  1. jmeter提取多个变量的多个值_jmeter用一个正则提取器提取多个值的两种方法
  2. NeurIPS 2021 | 简单且通用的多视图对比图聚类方法
  3. HDU - Reversi(dfs+水题)
  4. js cookies 存数组_用一个例子理解JS函数的底层处理机制
  5. 正则表达式来判断Sql语句中Select到from之间使用了*而不是字段名
  6. oracle手工收集awr报告_oracle手工生成AWR报告方法记录-阿里云开发者社区
  7. jedispool redis哨兵_通过java哨兵JedisSentinelPool代码示例连接对配置的redis哨兵主从模式进行测试验证...
  8. 洛谷——P1830 轰炸III
  9. APP响应时间和响应速度测试
  10. 立志欲坚不欲锐 - 2019 年小结
  11. 宝塔面板远程登录连接FTP空间详细教程
  12. 计算机术语 gc 是什么意思,GC是什么?为什么我们要去使用它
  13. 声音“三要素”---响度(loudness),音高(pitch),音色(timbre)
  14. 4种预测市场表现的方法
  15. 快速入池淘宝猜你喜欢方法技巧
  16. 在perl中简单的正则匹配
  17. 字符表单验证与正则表单验证
  18. Axure RP使用攻略--入门级(二)线框图元件
  19. ndk开发入门!对Android开发的现状和未来发展的思考,灵魂拷问
  20. 哪些计算机证书比较有用

热门文章

  1. Three.js中实现ASCII文本动画效果
  2. Mysql中怎样使用update更新某列的数据减去指定值
  3. HTML5中使用SpeechSynthesisAPI实现语音合成
  4. MongoDb在Windows上的下载安装以及可视化工具的下载与使用
  5. Eclipse中安装插件时提示:No repository found containing: osgi.bundle,org.eclipse.emf,2.8.0.v20180706-1146
  6. WInforn中设置ZedGraph的焦点显示坐标格式化以及显示三个坐标数的解决办法
  7. FastReport安装包下载、安装、去除使用限制以及工具箱中添加控件
  8. Java中获取实体List中某时间属性离当前时间最近的实体类的某一属性
  9. nanopi联网更新
  10. 移动端调用百度地图api_百度智能云图像识别API调用