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

将两个相邻的音符连起来,则妹子吹出的音符可以画出一条折线A,同样,秋实大哥吹出的音符也可以画出一条折线B,如果折线B已经与折线A的某一段完全重合,或者能够经过上下左右平移与折线A的某一段完全重合,则表示秋实大哥吹出了妹子的一部分旋律。
Input
第一行输入一个整数N(2≤N≤2⋅106),表示妹子吹了N个音符。
第二行输入N个音符,每个音符都是整数,且在32位整数范围内,每两个音符用一个空格隔开。
第三行输入一个整数M(2≤M≤2⋅106),表示秋实大哥吹了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..因为自己当时比较没想多。。构造的是最长前缀后缀等差数列....所以在失陪的时候还需要更改dis...
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 2e6+;
int front[maxn],s1[maxn],s2[maxn],len1,len2; void build_front()
{
front[] = -;
int t1 = - ,t2 = ,dis;
while(t2 < len2)
{
if (t1 == - || s2[t2] - s2[t1] == dis)
{
if (t1 == -)
{
dis = s2[t2] - s2[++t1];
if (t2 == )
t1--;
}
front[++t2] = ++t1;
}
else
t1 = front[t1];
}
} int kmp_search()
{
int t1 = , t2 = , ans = , dis = s1[] - s2[];
while(t1 < len1)
{
if (t2 == - || s1[t1] - s2[t2] == dis )
{
if (t2 == -)
dis = s1[t1] - s2[++t2];
t1++,t2++;
}
else
{
t2 = front[t2];
dis = s1[t1-] - s2[t2-];
}
if (t2 == len2)
{
ans ++;
t2 = front[t2];
dis = s1[t1-] - s2[t2-];
}
}
return ans;
} int main(int argc,char *argv[])
{
scanf("%d",&len1);
for(int i = ; i < len1 ; ++ i)
scanf("%d",&s1[i]);
scanf("%d",&len2);
for(int i = ; i < len2 ; ++ i)
scanf("%d",&s2[i]);
build_front();
int ans = kmp_search();
if (ans)
printf("Wow! Life Winner!\n%d\n",ans);
else
printf("Oh. That's impossible. I must have had a dream.\n");
return ;
}
UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>的更多相关文章
- 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 A>
A - 秋实大哥与连锁快餐店 Time Limit: 9000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) S ...
- UESTC_全都是秋实大哥 2015 UESTC Training for Search Algorithm & String<Problem J>
J - 全都是秋实大哥 Time Limit: 5000/2000MS (Java/Others) Memory Limit: 32000/32000KB (Java/Others) Subm ...
- UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<Problem M>
M - 秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Sub ...
- UESTC_秋实大哥与妹纸 2015 UESTC Training for Data Structures<Problem F>
F - 秋实大哥与妹纸 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 1500/1500KB (Java/Others) Submit ...
- UESTC_Palindromic String 2015 UESTC Training for Search Algorithm & String<Problem M>
M - Palindromic String Time Limit: 3000/1000MS (Java/Others) Memory Limit: 128000/128000KB (Java ...
- UESTC_韩爷的梦 2015 UESTC Training for Search Algorithm & String<Problem N>
N - 韩爷的梦 Time Limit: 200/100MS (Java/Others) Memory Limit: 1300/1300KB (Java/Others) Submit Stat ...
- UESTC_吴队长征婚 2015 UESTC Training for Search Algorithm & String<Problem E>
E - 吴队长征婚 Time Limit: 10000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_基爷的中位数 2015 UESTC Training for Search Algorithm & String<Problem D>
D - 基爷的中位数 Time Limit: 5000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
随机推荐
- 【转】ubuntu设置PATH----不错
原文网址:http://no001.blog.51cto.com/1142339/554927 试了好多遍,多无效.. 最后在/etc/enviroment下设置才有效. 不过让有一些未解问题 我使用 ...
- c# list exists(contains) delegate 委托判断 元素是否在LIST中存在
static void Main(string[] args) { List<GoodsInfo> list = new List<GoodsIn ...
- MVVM 介绍
我会修改一个关键架构,并将其带入我从那时起就在开发的各种应用,即使用一种叫做 Model-View-ViewModel 的架构替换 Model-View-Controller. 所以,MVVM 到底是 ...
- runtime的基本应用
1.什么是runtime? runtime是一套底层的C语言API,包含很多强大实用的C语言数据类型和C语言函数,平时我们编写的OC代码,底层都是基于runtime实现的. 2.runtime有什么作 ...
- 格而知之16:我所理解的Block(2)
11.那么Block到底是怎么实现的呢?试一试通过将Block 的代码转换成普通C语言代码来查看它的实现过程. 要将OC代码转换成C语言代码,可以使用clang编译的一个命令: 通过这个命令能把指定文 ...
- 开机后将sim/uim卡上的联系人写入数据库
tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51 ...
- java遍历泛型的方法
一.List遍历 Java中List遍历有三种方法来遍历泛型,主要为: 1.for循环遍历 2.iterator遍历 3.foreach遍历 package com.gmail.lsgjzhuwei; ...
- ASP.NET MVC 部分视图(转)
[部分视图] ASP.NET MVC 里的部分视图,相当于 Web Form 里的 User Control.我们的页面往往会有许多重用的地方,可以进行封装重用.使用 部分视图 : 1. 可以简写代 ...
- 在android源码环境下写上层应用的一个初步解决方法
在android源码环境下编写上层应用,一直以来我都觉得很麻烦.因为如果单纯将应用导入eclipse,那么framework层一些定制的API无法自动提示和补全,使用起来不太方便:如果将整个andro ...
- TextField详细用法
http://www.cnblogs.com/VincentXue/archive/2012/08/28/2660001.html