hdu3746 KMP
这题琢磨了挺长的时间。需要理解next[]表示了什么; next[i]代表了前缀和后缀的最大匹配的值,也就是个数。
len-next[len]表示循环节的长度; 比如abcab int fl=len-next[len]=3;循环节长度为3,即cab。然后int len=strlen(s)=5;
如果len%fl==0,那就count=len/fl,不然count=len/fl+1;count表示根据长度能够循环的次数。count*fl表示能够满足循环的时候的长度,
count*fl-len就是缺少的长度。不过如果next[len]==0,也就是本身的时候,就要输出自己的len了;
#include<stdio.h>
#include<string.h>
#define maxn 100010
char c[maxn];
int next[maxn];
void getnext()
{
int j,k,len=strlen(c);
j=;
k=-;
next[]=-;
while(j<len)
{
if(k==-||c[j]==c[k])
{
j++;
k++;
next[j]=k;
}
else
k=next[k];
}
}
void kmp()
{
int i,j;
getnext();
int len=strlen(c); /*for(i=0;i<=len;i++)
printf("%d ",next[i]);
printf("\n");*/
int fl=len-next[len];//循环节长度
int count=;
i=len;
count=len/fl;//循环节的次数
if(len%fl)//如果不能整除就要+1
count++;
// printf("%d %d ",fl,count);
if(next[len]==)//如果直接为0 所以就本身长度
printf("%d\n",len);
else
printf("%d\n",count*fl-len); }
int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%s",c);
kmp();
}
}
hdu3746 KMP的更多相关文章
- hdu-3746(kmp)
题意:给你一个字符串,问你至少增添几个字符可以把这个字符串变成一个循环字符串(ababa的循环节是ab,不是aba): 解题思路:利用kmp中的next数组,首先在这样求next的数组的代码里: vo ...
- Cyclic Nacklace hdu3746 kmp 最小循环节
题意:给出一段字符串 求最少在最右边补上多少个字符使得形成循环串(单个字符不是循环串) 自己乱搞居然搞出来了... 想法是: 如果nex[len]为0 那么答案显然是补len 否则 答案为循环 ...
- hdu3746 KMP的next数组应用,求项链首尾项链循环
题意: 给你一个项链,问你最少加多少个珠子能满足整个项链是一个循环的项链(首尾相连) 思路: KMP的简单应用只要了解next数组的意义就好说了,下面总结下 next在循环方面 ...
- hdu3746 kmp求循环节
CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, ...
- HDU-3746 Cyclic Nacklace 字符串匹配 KMP算法 求最小循环节
题目链接:https://cn.vjudge.net/problem/HDU-3746 题意 给一串珠子,我们可以在珠子的最右端或最左端加一些珠子 问做一条包含循环珠子的项链,最少还需要多少珠子 思路 ...
- [KMP求最小循环节][HDU3746][Cyclic Nacklace]
题意 给你个字符串,问在字符串末尾还要添加几个字符,使得字符串循环2次以上. 解法 无论这个串是不是循环串 i-next[i] 都能求出它的最小循环节 代码: /* 思路:kmp+字符串的最小循环节问 ...
- hdu3746 Cyclic Nacklace KMP
CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, ...
- kuangbin专题十六 KMP&&扩展KMP HDU3746 Cyclic Nacklace
CC always becomes very depressed at the end of this month, he has checked his credit card yesterday, ...
- HDU3746 Cyclic Nacklace —— KMP 最小循环节
题目链接:https://vjudge.net/problem/HDU-3746 Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others) M ...
随机推荐
- docker containerd shim分析
// containerd-shim is a small shim that sits in front of a runtime implementation that allows it to ...
- 【MVC 4】7.SportsSore:完成购物车
作者:[美]Adam Freeman 来源:<精通ASP.NET MVC 4> 本文将继续构建 SportsStore 示例应用程序.在上一章中,添加了对购物车的基本支持,现在打 ...
- Appium路线图及1.0正式版发布
Appium更新的速度极快,从我试用时候的0.12到1.0(0.18版本后就是1.0),完全符合移动互联网的节奏. 更新可能会慢,可以多试几次 整理了testerhome上思寒发表的帖子,让我们来看下 ...
- 五个有用的jquery小技巧
1.禁用鼠标右键 $(document).ready(function() { $(document).bind("contextmenu", function(e) { retu ...
- Centos中yum方式安装java
查看CentOS自带JDK是否已安装.◆输入:yum list installed |grep java. 若有自带安装的JDK,如何卸载CentOS系统自带Java环境?◆卸载JDK相关文件输入:y ...
- 或得的一个div是变量时
- GIT 专贴
1.官网 git-scm.com github.com 代码库 2.源码
- LUA __call
1. ev={} . functin ev.__call() . print "called from ev" . end . . setmetatable(ev, ev) . . ...
- H5实现拍照并上传
<!DOCTYPE HTML><html><head> <meta charset="UTF-8"> <meta ...
- 即学即会 Java 程序设计基础视频教程(100课整)无水印版
课程总共包含100个课时,总授课长达27多个小时,内容覆盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟通过本套视频的学习,学员能够快速的掌握java编程语言,成为java高手. 课程目录:课时1 ...