HDU - 3746 Cyclic Nacklace(KMP的next数组判循环节)
题目链接:点击查看
题目大意:现在规定想要制作一串珍珠手链,需要用到两段一模一样的字符串首位相接而成,现在给定一个字符串,问最少需要添加几个珍珠才能满足条件
题目分析:一开始以为是个简单的模拟题,但后来想到了很多特殊的样例让自己无从下手,后来知道了原来是要用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数组判循环节)相关推荐
- hdu 3746 Cyclic Nacklace
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 思路:KMP中Next数组的应用,求出最小的循环节,题目的意思是只能在字符串的后面上添加新的字符 ...
- 字符串周期--hdu 3746 Cyclic Nacklace
通过这题得出了一个很重要的结论,在用kmp算法求出next数组后,len-next[len]的值就是该字符串的最小循环节,该字符串的其他循环节都是它的倍数,如果len恰好是len-next[len]的 ...
- @hdu - 3746@ Cyclic Nacklace
目录 @description@ @solution@ @code@ @details@ @description@ 给你一个长度为 n 的由小写字母组成的字符串,让你在末尾增加尽量少的字母,使它变为 ...
- 【文文殿下】浅谈KMP算法next数组与循环节的关系
KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...
- HDU - Cyclic Nacklace(KMP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
- Uvalive - 3026 Period (kmp求字符串的最小循环节+最大重复次数)
参考:http://www.cnblogs.com/jackge/archive/2013/01/05/2846006.html 总结一下,如果对于next数组中的 i, 符合 i % ( i - n ...
- HDU - 6153 A Secret(KMP的next数组性质/扩展KMP)
题目链接:点击查看 题目大意:给出两个字符串a和b,我们首先定义L:字符串b当前的后缀子字符串长度,N:字符串b当前的后缀在字符串a中出现的次数,现在询问,对于字符串b的每一个后缀,求出L*N之和,答 ...
- 【HDU - 3746 】Cyclic Nacklace (KMP,最小循环节问题)
题干: CC always becomes very depressed at the end of this month, he has checked his credit card yester ...
- KMP中next数组的理解
next数组是KMP的核心,但对于next数组我们总是有时候感觉明白了,但有时候又感觉没明白,现在我就说下我自己对KMP中next数组的理解,首先next[i]上的数字的意义,next[i]表示的是当 ...
最新文章
- shiro(2)-架构与配置
- WinForm控件查找奇思
- python文件拷贝并校验_初级版python登录验证,上传下载文件加MD5文件校验
- sap.ca.scfld.md.Startup.init('cus.crm.notes', this);
- 给页面加速,干掉Dom Level 0 Event
- PWN-PRACTICE-BUUCTF-21
- python二维数组换行输出_关于用python绘制二维数组的问题
- oracle数据库要参考的书,[Oracle] 几本重要的电子图书下载-数据库专栏,ORACLE
- yconsole使用说明
- opencv 图像平滑、图像模糊函数的使用
- linux系统下载r软件安装,Linux安装R语言包
- et中计算机的快捷键,ET制版快捷键
- 高级Java程序员面试宝典
- RGB在线取色器,可视化三通道颜色
- 台式电脑主机前面耳机插孔没声音的解决方法
- 关于IBM刀片服务器
- 监听imput框的内容变化
- 文字检测识别系统SDK
- 【论文阅读】The Devil is in the Channels: Mutual-Channel Loss for Fine-Grained Image Classification
- 《技术人创业攻略》-用技术改变世界!