题目大意:

求最少在结尾补上几个字符才能形成循环

基本思路:

next数组有一个性质,长度为len的字符串的最小长度的循环节(可能没有,但有的话一定是)len-next【len】,因为最长不能是原串,所以最长为next【len】,所以最短的,也就是最基本的循环节就是len-next[【len】;

对于这个题,当next【len】不是0(即len=循环节长度tmp),而且长度len%tmp=0时,结果是0;否则结果为tmp-len%tmp,其中len%tmp表示出去多少个循环后还剩几个字符;

代码如下

#include<cstdio>
#include<cstring>
#include<algorithm>using namespace std;const int inf = 0x3f3f3f3f;
const int maxn = 100000+10;char T[maxn];
int _next[maxn];
int len;
void getNext(){len=strlen(T);int j=0,k=-1;_next[0]=-1;while(j<len){if(k==-1||T[j]==T[k]){_next[++j]=++k;}else{k=_next[k];}}
}
int main(){int cas;scanf("%d",&cas);while(cas--){scanf("%s",T);getNext();int tmp=len-_next[len];if(tmp!=len&&len%tmp==0) printf("0\n");else{printf("%d\n",tmp-len%tmp);}}return 0;
}

  

转载于:https://www.cnblogs.com/imzscilovecode/p/8081358.html

hdu 3746 kmp的next数组理解相关推荐

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

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

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

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

  3. KMP中next数组的理解

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

  4. HDU - 1358 Period(KMP的next数组求最小循环节)

    题目链接:点击查看 题目大意:给出一个长度为n的字符串,问有哪些前缀是周期性字符串 题目分析:因为n给的很大,所以肯定不能暴力判断了,我们可以巧妙的利用kmp的next数组进行判断,next数组有一个 ...

  5. hdu 3746 Cyclic Nacklace

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

  6. CodeForces - 1137B Camp Schedule(KMP的next数组+构造)

    题目链接:点击查看 题目大意:给出一个主字符串s,再给出一个子字符串ss,主串和子串都是只由0或1所组成的字符串,现在要求重组主串s,要求重组后的字符串: 所包含的0与1的个数与之前保持一致 尽可能多 ...

  7. HDU 1867 KMP

    题意: 求str1 的最长后缀与 str2 的最长前缀.使得 str1+str2  的长度最小,并且字典序最小(str1和str2可以互换) 题解: kmp的p数组的含义:p[i]表示以i为结尾的字符 ...

  8. HDU 6681(树状数组统计平面内射线的交点个数)

    HDU 6681(树状数组,统计平面内射线的交点个数) 题目链接:传送门 题意:给出k条射线,求射线将n∗mn*mn∗m 的区域分成几个联通块.每两条射线的端点x坐标和y坐标都互不相同. 思路:根据 ...

  9. 我关于KMP算法的初步理解

    唔,时间过得好快,下学期都过了一半了,因为寒假玩去了,数据结构也没学完.后来看到KMP算法的时候,第一次一晚上就想一个问题,当然,总算是有些眉目了,下面是我对KMP算法的一些理解,当然还没有看完,但是 ...

  10. KMP的Next数组应用总结

    Next数组求法 不用初始化,因为Next数组是递推出来的.用法为getFail(s,strlen(s)). const int MAX_N=101000; char str[MAX_N],patte ...

最新文章

  1. 如何读取抓取的wifi包内容
  2. Spring @Transactional (一)
  3. [ATF]-ATF makefile的导读
  4. 别总写代码,这100多个相见恨晚的网站比涨工资都重要
  5. uiwebview 编辑html5,【iOS】UIWebView HTML5 扩展
  6. jquery查找父窗体id_Vue父组件获取子组件中的变量
  7. phpexcel常见问题的解决办法
  8. Bootstrap 排版强调
  9. 武汉群硕面试心得体会(上)
  10. VS编译报错Error2019
  11. C#解决“Emgu.CV.CvInvoke”的类型初始值设定项引发异常 的其中一个办法
  12. 深度学习笔记(二):简单神经网络,后向传播算法及实现
  13. 区块链简介与PMD投资方式
  14. 计算机科学与技术[计算机及应用](本科)自考
  15. 局域网中工作组和域之间的区别
  16. 云服务器系统设计,云服务器 用户系统设计
  17. 硬盘活动分区(将磁盘分区标为活动或取消活动的方法)(转)
  18. JSP与JavaBeans
  19. Chrome谷歌浏览器的快捷键:
  20. python爬虫专家_Python爬虫入门教程:微医挂号网专家团队数据抓取pyspider

热门文章

  1. Git教程_2 所有操作讲解
  2. python imagedraw line_修复PIL.ImageDraw.Draw.宽线条线条线条
  3. Opencv4找不到CV_FOURCC
  4. Android 使用 Gradle 打包 - 签名配置
  5. 俄罗斯方块的那些事:1.概要
  6. DC学院学习笔记 (十):SQLite及MongoDB
  7. 重新认识java-break和continue的标签你用过么
  8. Golang学习(12)——regex包
  9. shell 数组详解
  10. 深入了解Java ClassLoader、Bytecode 、ASM、cglib (I)