MUH and Cube Walls
Codeforces Round #269 (Div. 2) D:http://codeforces.com/problemset/problem/471/D
题意:给定两个序列a ,b, 如果在a中存在一段连续的序列使得a[i]-b[0]==k, a[i+1]-b[1]==k.... a[i+n-1]-b[n-1]==k,就说b串在a串中出现过!最后输出b串在a串中出现几次!
题解:把两个串进行处理,相邻项之间做差,然后就很容易想到用KMP来搞,然后注意几个特判就行。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define N 1000005
using namespace std;
long long next[N];
long long s1[N];//模板串
long long s2[N];//主串
int len1,len2,ans;
long long a[N],b[N];
void getnext(int plen){
int i = ,j = -;
next[] = -;
while( i<plen ){
if(j==-||s1[i]==s1[j]){
++i;++j;
//if(s1[i]!=s1[j] )这里别隐去的的部分,也可以不划去
next[i] = j;
// else
// next[i] = next[j];
}
else
j = next[j];
}
}
void KMP(){
getnext(len1);
int i = ,j = ;
while (i<len2&&j<len1){
if( j == - || s2[i] == s1[j] ){
++i;
++j;
}
else {
j = next[j]; }
if( j==len1 ){//找到一个匹配串之后,不是在原来串中往后移动一位,而是移动i-(j-next[j]);
ans++;
j=next[j];
}
}
}
int n,m;
int main(){
scanf("%d%d",&n,&m);
ans=;
for(int i=;i<=n;i++){
scanf("%I64d",&a[i]);
}
for(int j=;j<=m;j++){
scanf("%I64d",&b[j]);
}
for(int i=;i<=n;i++){
a[i-]=a[i]-a[i-]+1e9;
s2[i-]=a[i-];
// printf("%I64d " ,s2[i-2]);
}
//puts("");
for(int i=;i<=m;i++){
b[i-]=b[i]-b[i-]+1e9;
s1[i-]=b[i-];
//printf("%I64d " ,s1[i-2]);
}
if(n==&&m==)puts("");
else if(n==&&m!=)puts("");
else if(m==&&n!=)printf("%d\n",n);
else{
len2=n-;
len1=m-;
getnext(m-);
KMP();
printf("%d\n",ans);
}
}
MUH and Cube Walls的更多相关文章
- D - MUH and Cube Walls
D. MUH and Cube Walls Polar bears Menshykov and Uslada from the zoo of St. Petersburg and elephant ...
- Codeforces Round #269 (Div. 2) D - MUH and Cube Walls kmp
D - MUH and Cube Walls Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & % ...
- Codeforces Round #269 (Div. 2)-D. MUH and Cube Walls,KMP裸模板拿走!
D. MUH and Cube Walls 说实话,这题看懂题意后秒出思路,和顺波说了一下是KMP,后来过了一会确定了思路他开始写我中途接了个电话,回来kaungbin模板一板子上去直接A了. 题意: ...
- [codeforces471D]MUH and Cube Walls
[codeforces471D]MUH and Cube Walls 试题描述 Polar bears Menshykov and Uslada from the zoo of St. Petersb ...
- CodeForces 471D MUH and Cube Walls -KMP
Polar bears Menshykov and Uslada from the zoo of St. Petersburg and elephant Horace from the zoo of ...
- codeforces MUH and Cube Walls
题意:给定两个序列a ,b, 如果在a中存在一段连续的序列使得 a[i]-b[0]==k, a[i+1]-b[1]==k.... a[i+n-1]-b[n-1]==k 就说b串在a串中出现过!最后输出 ...
- Codeforces 471 D MUH and Cube Walls
题目大意 Description 给你一个字符集合,你从其中找出一些字符串出来. 希望你找出来的这些字符串的最长公共前缀*字符串的总个数最大化. Input 第一行给出数字N.N在[2,1000000 ...
- CF471D MUH and Cube Walls
Link 一句话题意: 给两堵墙.问 \(a\) 墙中与 \(b\) 墙顶部形状相同的区间有多少个. 这生草翻译不想多说了. 我们先来转化一下问题.对于一堵墙他的向下延伸的高度,我们是不用管的. 我们 ...
- CodeForces–471D--MUH and Cube Walls(KMP)
Time limit 2000 ms Memory limit 262144 kB Polar bears Menshykov and Uslada from the zoo of ...
随机推荐
- N_F1_APPROVE
package nc.bs.pub.action; import java.util.ArrayList; import java.util.Hashtable; import java.util.L ...
- sharepoint 删除list里的所有内容
[System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") $siteUrl = " ...
- netbeans环境中使用maven搭建jsf、primefaces工程
新建maven工程,选择web工程 增加jsf框架,加入primefaces 部署到服务器,在浏览器中打开页面,这是primefaces框架的页面. 此时工程web目录下有如下文件 web.xml文件 ...
- ### 学习《C++ Primer》- 6
Part 6: 拷贝控制(第13章) // @author: gr // @date: 2015-01-08 // @email: forgerui@gmail.com 一.拷贝.赋值与销毁 拷贝构造 ...
- PHP执行过程
PHP执行过程 任何一种语言的源代码计算机都没有办法直接执行,需要转换成计算机能够识别的机器指令. PHP也是一门高级语言,也需编译(解释) PHP的解析过程: 1.请求源代码,进行词法解析, ...
- STL标准模板库 向量容器(vector)
向量容器使用动态数组存储.管理对象.因为数组是一个随机访问数据结构,所以可以随机访问向量中的元素.在数组中间或是开始处插入一个元素是费时的,特别是在数组非常大的时候更是如此.然而在数组末端插入元素却很 ...
- WIX: Hide installed program from the Add/Remove Programs window.
Reference article : How to hide an entry in the Add/Remove Programs applet? In Wix source files, set ...
- Registry uninstall values
Original link: http://windowssucks.wordpress.com/win-registry-uninstall-values/ -------------------- ...
- 模板:函数memset
需要的头文件 <memory.h> or <string.h> memset 函数介绍 void *memset(void *s, int ch, size_t n); 函 ...
- JSP九大内置对象和四个作用域
JSP九大内置对象和四个作用域 在学习JSP的时候,首先就要先了解JSP的内置对象,什么是内置对象呢?内置对象也叫隐含对象,就是不需要预先声明就可以在脚本代码和表达式中随意使用.而这样的内置对象在JS ...