题目链接:点击查看

题目大意:现在规定想要制作一串珍珠手链,需要用到两段一模一样的字符串首位相接而成,现在给定一个字符串,问最少需要添加几个珍珠才能满足条件

题目分析:一开始以为是个简单的模拟题,但后来想到了很多特殊的样例让自己无从下手,后来知道了原来是要用kmp的next数组的一个小性质:

设len=n-next[n],则len就是当前字符串的循环节,若n%len==0,则说明该字符串是周期性字符串

有了这个性质,我们就可以直接先求出next数组,然后来判断缺少多少个珠子了

注意一下这个题目的数据量很大,所以要用char字符串,用string类的话会超时,但不知道为什么用了cin加速外挂会WA掉。。所以还是老老实实用scanf和char字符串吧

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;char s[N];int nx[N];void getnext(char s[])
{int len=strlen(s);nx[0]=-1;int i=0,j=-1;while(i<len){if(j==-1||s[i]==s[j])nx[++i]=++j;elsej=nx[j];}
}int main()
{
//  freopen("input.txt","r",stdin);int w;cin>>w;while(w--){scanf("%s",s);int n=strlen(s);getnext(s);
//        for(int i=0;i<n;i++)
//            cout<<nx[i]<<' ';
//        cout<<endl;int len=n-nx[n];if(len!=0&&n%len==0&&n/len>1)//若当前字符串已经满足条件,则无需添加珠子 printf("0\n");else//否则输出还差几个珠子 printf("%d\n",len-n%len);}return 0;
}

HDU - 3746 Cyclic Nacklace(KMP的next数组判循环节)相关推荐

  1. hdu 3746 Cyclic Nacklace

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

  2. 字符串周期--hdu 3746 Cyclic Nacklace

    通过这题得出了一个很重要的结论,在用kmp算法求出next数组后,len-next[len]的值就是该字符串的最小循环节,该字符串的其他循环节都是它的倍数,如果len恰好是len-next[len]的 ...

  3. @hdu - 3746@ Cyclic Nacklace

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

  4. 【文文殿下】浅谈KMP算法next数组与循环节的关系

    KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...

  5. HDU - Cyclic Nacklace(KMP)

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

  6. Uvalive - 3026 Period (kmp求字符串的最小循环节+最大重复次数)

    参考:http://www.cnblogs.com/jackge/archive/2013/01/05/2846006.html 总结一下,如果对于next数组中的 i, 符合 i % ( i - n ...

  7. HDU - 6153 A Secret(KMP的next数组性质/扩展KMP)

    题目链接:点击查看 题目大意:给出两个字符串a和b,我们首先定义L:字符串b当前的后缀子字符串长度,N:字符串b当前的后缀在字符串a中出现的次数,现在询问,对于字符串b的每一个后缀,求出L*N之和,答 ...

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

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

  9. KMP中next数组的理解

    next数组是KMP的核心,但对于next数组我们总是有时候感觉明白了,但有时候又感觉没明白,现在我就说下我自己对KMP中next数组的理解,首先next[i]上的数字的意义,next[i]表示的是当 ...

最新文章

  1. shiro(2)-架构与配置
  2. WinForm控件查找奇思
  3. python文件拷贝并校验_初级版python登录验证,上传下载文件加MD5文件校验
  4. sap.ca.scfld.md.Startup.init('cus.crm.notes', this);
  5. 给页面加速,干掉Dom Level 0 Event
  6. PWN-PRACTICE-BUUCTF-21
  7. python二维数组换行输出_关于用python绘制二维数组的问题
  8. oracle数据库要参考的书,[Oracle] 几本重要的电子图书下载-数据库专栏,ORACLE
  9. yconsole使用说明
  10. opencv 图像平滑、图像模糊函数的使用
  11. linux系统下载r软件安装,Linux安装R语言包
  12. et中计算机的快捷键,ET制版快捷键
  13. 高级Java程序员面试宝典
  14. RGB在线取色器,可视化三通道颜色
  15. 台式电脑主机前面耳机插孔没声音的解决方法
  16. 关于IBM刀片服务器
  17. 监听imput框的内容变化
  18. 文字检测识别系统SDK
  19. 【论文阅读】The Devil is in the Channels: Mutual-Channel Loss for Fine-Grained Image Classification
  20. 《技术人创业攻略》-用技术改变世界!

热门文章

  1. 登录方式2:windows命令行
  2. 理解吞吐量和停顿时间
  3. FileSystemResource 和ClassPathResource 有何区别?
  4. Quartz集群部署
  5. 分布式架构的分布式文件系统
  6. 通过RocketMQ的java客户端api进行测试
  7. 文本编码-Python2.x处理中文字符串
  8. 异常-主动抛出异常案例演练
  9. 验证用户输入的是不是中文名字 淘宝精品案例 元素样式设置的方式 链式编程
  10. 深入理解Kafka(3)-Consumer