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 ...
随机推荐
- Shortest Word Distance 解答
Question Given a list of words and two words word1 and word2, return the shortest distance between t ...
- 【转】Android NDK开发入门实例
写这个,目的就是记录一下我自己的NDK是怎么入门的.便于以后查看,而不会忘了又用搜索引擎一顿乱搜.然后希望能够帮助刚学的人入门. 先转一段别人说的话:“NDK全称:Native Development ...
- WPF页面切换及弹窗
WPF页面切换及弹窗 结构如图: 效果如图: 代码如下: xaml <Window x:Class="PageChange.MainWindow" xmlns="h ...
- Android学习总结——去除标题栏
1.继承app.Activity的Activity去除标题栏 @Override protected void onCreate(Bundle savedInstanceState) { super. ...
- 编码规范(CSS)
code { font-family: "PT Mono", Menlo, "Courier New", monospace; padding: 2px 4px ...
- [转]Laravel 4之数据库操作
Laravel 4之数据库操作 http://dingjiannan.com/2013/laravel-database/ 数据库配置 Laravel数据库配置在app/config/database ...
- openssl ans.1编码规则分析及证书密钥编码方式
1 数据编码格式 openssl的数据编码规则是基于ans.1的,ans.1是什么 ? 先上高大上的解释 ASN.1(Abstract Syntax Notation One), 是一种结构化的描述语 ...
- WEB服务器2--IIS架构(转)
开始之前可以先读:http://www.cnblogs.com/tiantianle/p/5419445.html 原文:http://www.cnblogs.com/arbin98/archive/ ...
- ios10 适配问题总结
看各个大神整理而成 1.检查版本问题 不可以像下面这样用 #define isiOS10 ([[[[UIDevice currentDevice] systemVersion] substringTo ...
- Python3.5入门学习记录-函数
Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...