hdu 3746 kmp的next数组理解
题目大意:
求最少在结尾补上几个字符才能形成循环
基本思路:
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数组理解相关推荐
- hdu 3746 kmp求循环节 下标从1开始
长度为m[1,2...m]的模式的循环节为 m-next[m] , aaa 循环节clc为1 (clc=m-next[m]= 3-2 =1) 此时 m%clc == 0 表示 ...
- HDU - 3746 Cyclic Nacklace(KMP的next数组判循环节)
题目链接:点击查看 题目大意:现在规定想要制作一串珍珠手链,需要用到两段一模一样的字符串首位相接而成,现在给定一个字符串,问最少需要添加几个珍珠才能满足条件 题目分析:一开始以为是个简单的模拟题,但后 ...
- KMP中next数组的理解
next数组是KMP的核心,但对于next数组我们总是有时候感觉明白了,但有时候又感觉没明白,现在我就说下我自己对KMP中next数组的理解,首先next[i]上的数字的意义,next[i]表示的是当 ...
- HDU - 1358 Period(KMP的next数组求最小循环节)
题目链接:点击查看 题目大意:给出一个长度为n的字符串,问有哪些前缀是周期性字符串 题目分析:因为n给的很大,所以肯定不能暴力判断了,我们可以巧妙的利用kmp的next数组进行判断,next数组有一个 ...
- hdu 3746 Cyclic Nacklace
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 思路:KMP中Next数组的应用,求出最小的循环节,题目的意思是只能在字符串的后面上添加新的字符 ...
- CodeForces - 1137B Camp Schedule(KMP的next数组+构造)
题目链接:点击查看 题目大意:给出一个主字符串s,再给出一个子字符串ss,主串和子串都是只由0或1所组成的字符串,现在要求重组主串s,要求重组后的字符串: 所包含的0与1的个数与之前保持一致 尽可能多 ...
- HDU 1867 KMP
题意: 求str1 的最长后缀与 str2 的最长前缀.使得 str1+str2 的长度最小,并且字典序最小(str1和str2可以互换) 题解: kmp的p数组的含义:p[i]表示以i为结尾的字符 ...
- HDU 6681(树状数组统计平面内射线的交点个数)
HDU 6681(树状数组,统计平面内射线的交点个数) 题目链接:传送门 题意:给出k条射线,求射线将n∗mn*mn∗m 的区域分成几个联通块.每两条射线的端点x坐标和y坐标都互不相同. 思路:根据 ...
- 我关于KMP算法的初步理解
唔,时间过得好快,下学期都过了一半了,因为寒假玩去了,数据结构也没学完.后来看到KMP算法的时候,第一次一晚上就想一个问题,当然,总算是有些眉目了,下面是我对KMP算法的一些理解,当然还没有看完,但是 ...
- KMP的Next数组应用总结
Next数组求法 不用初始化,因为Next数组是递推出来的.用法为getFail(s,strlen(s)). const int MAX_N=101000; char str[MAX_N],patte ...
最新文章
- 如何读取抓取的wifi包内容
- Spring @Transactional (一)
- [ATF]-ATF makefile的导读
- 别总写代码,这100多个相见恨晚的网站比涨工资都重要
- uiwebview 编辑html5,【iOS】UIWebView HTML5 扩展
- jquery查找父窗体id_Vue父组件获取子组件中的变量
- phpexcel常见问题的解决办法
- Bootstrap 排版强调
- 武汉群硕面试心得体会(上)
- VS编译报错Error2019
- C#解决“Emgu.CV.CvInvoke”的类型初始值设定项引发异常 的其中一个办法
- 深度学习笔记(二):简单神经网络,后向传播算法及实现
- 区块链简介与PMD投资方式
- 计算机科学与技术[计算机及应用](本科)自考
- 局域网中工作组和域之间的区别
- 云服务器系统设计,云服务器 用户系统设计
- 硬盘活动分区(将磁盘分区标为活动或取消活动的方法)(转)
- JSP与JavaBeans
- Chrome谷歌浏览器的快捷键:
- python爬虫专家_Python爬虫入门教程:微医挂号网专家团队数据抓取pyspider
热门文章
- Git教程_2 所有操作讲解
- python imagedraw line_修复PIL.ImageDraw.Draw.宽线条线条线条
- Opencv4找不到CV_FOURCC
- Android 使用 Gradle 打包 - 签名配置
- 俄罗斯方块的那些事:1.概要
- DC学院学习笔记 (十):SQLite及MongoDB
- 重新认识java-break和continue的标签你用过么
- Golang学习(12)——regex包
- shell 数组详解
- 深入了解Java ClassLoader、Bytecode 、ASM、cglib (I)