K - 秋实大哥の恋爱物语

Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others)
Submit Status

传说有这么一个故事!

在一个月白风清的晚上,秋实大哥约一位他心仪的妹子一起逛校园,浪漫的秋实大哥决定在当晚对妹子表白。“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
1 1 5 5 6 6 5 4 4 3 3 2 2 1
14
0 0 4 4 5 5 4 3 3 2 2 1 1 0
Wow! Life Winner!
1
20
1 2 1 2 1 2 1 2 1 1 0 1 3 2 3 2 7 6 7 2
3
6 5 6
Wow! Life Winner!
6
25
2 3 2 3 3 2 3 3 3 2 3 2 2 3 3 2 2 2 3 3 3 3 2 3 3
3
2 3 3
Wow! Life Winner!
5
29
6 6 7 5 5 6 4 4 5 3 3 4 2 2 3 1 1 2 0 0 1 -1 -1 0 -2 -2 -1 -3 -3
8
6 6 7 5 5 6 4 4
Wow! Life Winner!
8
26
1 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 0
5
1 1 0 1 1
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>的更多相关文章

  1. UESTC_秋实大哥与时空漫游 2015 UESTC Training for Graph Theory<Problem C>

    C - 秋实大哥与时空漫游 Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

  2. UESTC_秋实大哥与连锁快餐店 2015 UESTC Training for Graph Theory<Problem A>

    A - 秋实大哥与连锁快餐店 Time Limit: 9000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) S ...

  3. UESTC_全都是秋实大哥 2015 UESTC Training for Search Algorithm & String<Problem J>

    J - 全都是秋实大哥 Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others) Subm ...

  4. UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<Problem M>

    M - 秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  5. UESTC_秋实大哥与妹纸 2015 UESTC Training for Data Structures<Problem F>

    F - 秋实大哥与妹纸 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 1500/1500KB (Java/Others) Submit ...

  6. 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 ...

  7. 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 ...

  8. UESTC_吴队长征婚 2015 UESTC Training for Search Algorithm & String<Problem E>

    E - 吴队长征婚 Time Limit: 10000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  9. UESTC_基爷的中位数 2015 UESTC Training for Search Algorithm & String<Problem D>

    D - 基爷的中位数 Time Limit: 5000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

随机推荐

  1. 如何使用WCF调试器WcfTestClient.exe

    如果启用服务出现如下异常 请启用下面该服务 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 文件->添加服务  地 ...

  2. SQL Server (MSSQLSERVER) 服务因 找不到指定的模块。 服务特定错误而停止。

    新装了sql server 2008,发现sqlserver 服务没法起来.查看系统日志是7024如下: 事件类型: 错误 事件来源: Service Control Manager 事件种类: 无 ...

  3. Hdu3640-I, zombie(模拟+二分)

    The "endless" model in "I, zombie" of "Plants vs. Zombies" is my favou ...

  4. Horner规则

    霍纳(Horner)规则是采用最少的乘法运算策略,求多项式 A(x) = a[n]x^n + a[n-1]x^(n-1) + ... + a[1]x^1 + a[0]x^0 在x处的值. 该规则为 A ...

  5. hdu 5433 Xiao Ming climbing(bfs+三维标记)

    Problem Description   Due to the curse made by the devil,Xiao Ming is stranded on a mountain and can ...

  6. servlet核心API的UML图

  7. HTML基础知识笔记(一)

    HTML定义 HTML指的是超文本标记语言 HTML不是编程语言,而是标记语言 标记语言是一套标记标签 HTML是用标记标签来描述网页   HTML标签1 <html></html& ...

  8. ASP.NET 后台下载文件方法

    void DownLoadFile(string fileName) { string filePath = Server.MapPath(fileName);//路径 //以字符流的形式下载文件 F ...

  9. linux基础内容学习一:linux下的分区及安装

    linux看系统版本信息 uname -a 如果显示为i386,i686则为32位系统,如果为x86_64则为64位 一块硬盘最多可以有四个主分区其中一个主分区可以用一个扩展分区替换,在这个扩展分区中 ...

  10. TransactionScrope

    测这个东西其实是由生产环境数据库报错,ORA-14450错误. 测试结果是: 1)使用transactionscrope时,数据库连接打开需在scrope内打开: 2)TransactionScope ...