cdoj1091-秋实大哥の恋爱物语 【kmp】
http://acm.uestc.edu.cn/#/problem/show/1091
秋实大哥の恋爱物语
Time Limit: 5000/2000MS (Java/Others) Memory Limit: 32000/32000KB (Java/Others)
传说有这么一个故事!
在一个月白风清的晚上,秋实大哥约一位他心仪的妹子一起逛校园,浪漫的秋实大哥决定在当晚对妹子表白。“XXXXX...”,秋实大哥温情地说完了准备已久的话。而妹子决定用一种浪漫的方式接受秋实大哥(其实妹子早已对秋实大哥动心,这一刻她早已迫不及待了,但还是决定考秋实大哥最后一关,再委婉地接受)。妹子拿出了她心爱的口琴,吹出了一首迷人的曲子...... “你能把我的曲子重复一遍么?”,但考虑到万一秋实大哥没有做到而失去了赢得人赢的心的机会,妹子又说到,“只要你能吹出我的一部分旋律,我就答应你,从今以后,我就是你的一部分”。
好奇心重的你,真的很想知道秋实大哥最终有没有抱得美人归,除此之外,你还想知道秋实大哥吹出的曲子的旋律有多少次符合妹子的旋律。

将两个相邻的音符连起来,则妹子吹出的音符可以画出一条折线A,同样,秋实大哥吹出的音符也可以画出一条折线B,如果折线B已经与折线A的某一段完全重合,或者能够经过上下左右平移与折线A的某一段完全重合,则表示秋实大哥吹出了妹子的一部分旋律。
Input
第一行输入一个整数N(2≤N≤2 000 000),表示妹子吹了N个音符。
第二行输入N个音符,每个音符都是整数,且在32位整数范围内,每两个音符用一个空格隔开。
第三行输入一个整数M(2≤M≤2 000 000),表示秋实大哥吹了M个音符。
最后一行输入M个音符,每个音符都是整数,且在32位整数范围内,每两个音符用一个空格隔开。
Output
如果秋实大哥抱得美人归了,第一行输出Wow! Life Winner!,第二行再输出一个整数,表示秋实大哥的曲子的旋律有多少次符合妹子的。
如果秋实大哥没有做到,输出Oh. That's impossible. I must have had a dream.
Sample input and output
| Sample Input | Sample Output | 
|---|---|
14  | 
Wow! Life Winner!  | 
20  | 
Wow! Life Winner!  | 
25  | 
Wow! Life Winner!  | 
29  | 
Wow! Life Winner!  | 
26  | 
Oh. That's impossible. I must have had a dream.  | 
解题思路:kmp。题目说判断折线重合,可以把原数据的相邻的点做减法,就可以直接用kmp求子串出现次数了。至于kmp,可以参考我这篇博文:http://www.cnblogs.com/jiu0821/p/4189987.html。单求子串第一次出现的位置,不需要用到next数组的next[len];求子串出现次数的话,需要用到next[len],意思是每次匹配完毕,j就等于len,这时候理解为第len项不匹配(事实上t串没有这一项),令j=next[len],求解下一次出现情况,最后达到目的。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std; const int N=;
int s[N],t[N];
int next_[N],len,ls; void get_next_();
int kmp(); int main(){
//freopen("D:\\input.in","r",stdin);
scanf("%d%d",&ls,&s[]);
for(int i=;i<ls;i++) scanf("%d",&s[i]),s[i-]=s[i]-s[i-];
scanf("%d%d",&len,&t[]);
for(int i=;i<len;i++) scanf("%d",&t[i]),t[i-]=t[i]-t[i-];
ls--,len--;
get_next_();
int ans=kmp();
if(ans) printf("Wow! Life Winner!\n%d\n",ans);
else puts("Oh. That's impossible. I must have had a dream.");
return ;
}
void get_next_(){
next_[]=-;
next_[]=;
for(int i=;i<len;i++){
int j=next_[i];
while(){
if(t[i]==t[j]){
next_[i+]=j+;
break;
}else{
j=next_[j];
}
if(j<){
next_[i+]=;
break;
}
}
}
}
int kmp(){
int ans=,i=,j=;
while(i<ls){
if(j<||s[i]==t[j]) ++i,++j;
else j=next_[j];
if(j==len){
ans++;
j=next_[j];
}
}
return ans;
}
cdoj1091-秋实大哥の恋爱物语 【kmp】的更多相关文章
- 2015 UESTC 搜索专题K题  秋实大哥の恋爱物语 kmp
		
秋实大哥の恋爱物语 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 De ...
 - UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>
		
K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others) Memory Limit: 32000/32000KB (Java/Others) Su ...
 - 2015 UESTC 搜索专题J题  全都是秋实大哥 kmp
		
全都是秋实大哥 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Desc ...
 - uestc 1073 秋实大哥与线段树 Label:线段树
		
秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) “学习本无底, ...
 - UESTC 1074 秋实大哥搞算数 栈模拟
		
秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
 - UESTC_秋实大哥与时空漫游 2015 UESTC Training for Graph Theory<Problem C>
		
C - 秋实大哥与时空漫游 Time Limit: 4500/1500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Su ...
 - UESTC_秋实大哥带我飞 2015 UESTC Training for Graph Theory<Problem B>
		
B - 秋实大哥带我飞 Time Limit: 300/100MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
 - UESTC_秋实大哥与连锁快餐店 2015 UESTC Training for Graph Theory<Problem A>
		
A - 秋实大哥与连锁快餐店 Time Limit: 9000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) S ...
 - UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic Programming<Problem B>
		
B - 秋实大哥掰手指 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 2048/1024KB (Java/Others) Submit ...
 
随机推荐
- mock的使名用一(生成随机数据)
			
Mock.Random 是一个工具类,用于生成各种随机数据. Mock.Random 的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参数]) . var Random = Moc ...
 - Lua在Linux下的安装
			
转载于:http://blog.csdn.net/aizquan/article/details/21190393 本来这个很简单,但常常会偶尔会有问题,也记不住,所以就直接转下来,以后方便遇到的时候 ...
 - jQuery的deferred对象详解(转载)
			
jQuery的开发速度很快,几乎每半年一个大版本,每两个月一个小版本.(由于无法转载,复制原文 .原文链接——原作者:阮一峰) 每个版本都会引入一些新功能.今天我想介绍的,就是从jQuery 1.5. ...
 - DZ X3 和 ECshop 通过uc_server实现会员同步整合教程.
			
会员数据整合是实现商城和论坛系统共享会员数据.论坛系统注册会员整合后可直接在商城登陆.现以本人社区为例.本人社区采用DZ最新的X3.1 商城采用的ECshop最近的V2.7.3 现在想把两个模板整合在 ...
 - F4NNIU 版本的标准电阻列表(2018-09-29 更新)
			
F4NNIU 版本的标准电阻列表(2018-09-29 更新) 值代码 电阻值 格式化值 单位 公差代码 公差 格式化值数字 描述 0RJ 0 0 R J 5% J0000 0R 5% (0RJ) 1 ...
 - Iterations --codility
			
lesson 1:Iterations 1. BinaryGap-----[100%] Find longest sequence of zeros in binary representation ...
 - 12.Python使用requests发送post请求
			
1.我们使用postman进行接口测试的时候,发现POST请求方式的编码有3种,具体的编码方式如下: A:application/x-www-form-urlencoded ==最常见的post提交数 ...
 - win10下启动zkui
			
zkui是一个开源的zookeeper可视化工具,现在看下我们怎么启动这个工具.首先下载源码(我把它放在E:\workspace): git clone https://github.com/Deem ...
 - TCP/IP概念简述
			
这里所说的是广义上的TCP/IP协议群,而不是特指TCP和IP这两种具体的协议.既然是协议群,那么都有哪些协议呢?我们先不着急回答这个问题,因为要弄清楚这个问题,首先得了解另两件事,就是为啥要有这个协 ...
 - RK3288 制作内核开机logo
			
安装工具 sudo apt-get install netpbm 1.制作图片 (1).图片为bmp格式 $ convert logo.bmp logo.png $ pngtopnm logo.png ...