Time limit         2000 ms 
Memory limit  262144 kB

Polar bears Menshykov and Uslada from the zoo of St. Petersburg and elephant Horace from the zoo of Kiev got hold of lots of wooden cubes somewhere. They started making cube towers by placing the cubes one on top of the other. They defined multiple towers standing in a line as a wall. A wall can consist of towers of different heights.

Horace was the first to finish making his wall. He called his wall an elephant. The wall consists of w towers. The bears also finished making their wall but they didn't give it a name. Their wall consists of n towers. Horace looked at the bears' tower and wondered: in how many parts of the wall can he "see an elephant"? He can "see an elephant" on a segment of w contiguous towers if the heights of the towers on the segment match as a sequence the heights of the towers in Horace's wall. In order to see as many elephants as possible, Horace can raise and lower his wall. He even can lower the wall below the ground level (see the pictures to the samples for clarification).

Your task is to count the number of segments where Horace can "see an elephant".

Input

The first line contains two integers n and w (1 ≤ n, w ≤ 2·105) — the number of towers in the bears' and the elephant's walls correspondingly. The second line contains n integers ai (1 ≤ ai ≤ 109) — the heights of the towers in the bears' wall. The third line contains w integers bi (1 ≤ bi ≤ 109) — the heights of the towers in the elephant's wall.

Output

Print the number of segments in the bears' wall where Horace can "see an elephant".

Example

Input

13 5
2 4 5 5 4 3 2 2 2 3 3 2 1
3 4 4 3 2

Output

2
Note

The picture to the left shows Horace's wall from the sample, the picture to the right shows the bears' wall. The segments where Horace can "see an elephant" are in gray.

题意:

见图,给定两段参差不齐的成墙,问图中左边灰色的可以在右边匹配到多少次?

匹配时可以上下移动,即只关心每一个柱的差值

分析:

一开始想到了用KMP,可是傻B地直接暴力的。。。。果断TLE

后来看了题解,很巧妙的处理了一下:

基于一段连续区间无论怎么变他们的相对位置不会变,所以分别将两个序列相邻的元素作差,一段区间的相对位置不会变,所以正好可以用差值去匹配。

代码:

  1 #include<bits/stdc++.h>
2 const int N=2e5+7;
3 int len1,len2,a[N],b[N],f[N],p[N];
4 void kmp_pre(int *x,int m,int *next)//以下感谢kuangbin神主提供的模板。
5 {
6 int i,j;
7 j=next[0]=-1;
8 i=0;
9 while(i<m)
10 {
11 while(-1!=j&&x[i]!=x[j]) j=next[j];
12 next[++i]=++j;
13 }
14 }
15 void prekmp(int *x,int m,int *kmpnext)
16 {
17 int i,j=-1;
18 kmpnext[0]=-1;
19 i=0;
20 while(i<m)
21 {
22 while(-1!=j&&x[i]!=x[j]) j=kmpnext[j];
23 if(x[++i]==x[++j]) kmpnext[i]=kmpnext[j];
24 else kmpnext[i]=j;
25 }
26 }
27 int next[N];
28 int kmp_count(int *x,int m,int *y,int n)
29 {
30 int i,j,ans=0;
31 kmp_pre(x,m,next);
32 i=j=0;
33 while(i<n)
34 {
35 while(-1!=j&&y[i]!=x[j]) j=next[j];
36 i++,j++;
37 if(j>=m)
38 {
39 ans++;
40 j=next[j];
41 }
42 }
43 return ans;
44 }
45 int main()
46 {
47 int w,n;
48 while(~scanf("%d%d",&w,&n))
49 {
50 len1=0,len2=0;
51 for(int i=0;i<w;i++)
52 {
53 scanf("%d",&a[i]);
54 if(i) f[len1++]=a[i]-a[i-1];
55 }
56 for(int i=0;i<n;i++)
57 {
58 scanf("%d",&b[i]);
59 if(i) p[len2++]=b[i]-b[i-1];
60 }
61 if(n==1)
62 {
63 printf("%d\n",w);
64 continue;
65 }
66 int ans=kmp_count(p,len2,f,len1);
67 printf("%d\n",ans);
68 }
69 return 0;
70 }

CodeForces–471D--MUH and Cube Walls(KMP)的更多相关文章

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

  2. 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 & % ...

  3. Codeforces Round #269 (Div. 2)-D. MUH and Cube Walls,KMP裸模板拿走!

    D. MUH and Cube Walls 说实话,这题看懂题意后秒出思路,和顺波说了一下是KMP,后来过了一会确定了思路他开始写我中途接了个电话,回来kaungbin模板一板子上去直接A了. 题意: ...

  4. D - MUH and Cube Walls

    D. MUH and Cube Walls   Polar bears Menshykov and Uslada from the zoo of St. Petersburg and elephant ...

  5. [codeforces471D]MUH and Cube Walls

    [codeforces471D]MUH and Cube Walls 试题描述 Polar bears Menshykov and Uslada from the zoo of St. Petersb ...

  6. 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串中出现过!最后输出 ...

  7. Codeforces 471 D MUH and Cube Walls

    题目大意 Description 给你一个字符集合,你从其中找出一些字符串出来. 希望你找出来的这些字符串的最长公共前缀*字符串的总个数最大化. Input 第一行给出数字N.N在[2,1000000 ...

  8. MUH and Cube Walls

    Codeforces Round #269 (Div. 2) D:http://codeforces.com/problemset/problem/471/D 题意:给定两个序列a ,b, 如果在a中 ...

  9. CF471D MUH and Cube Walls

    Link 一句话题意: 给两堵墙.问 \(a\) 墙中与 \(b\) 墙顶部形状相同的区间有多少个. 这生草翻译不想多说了. 我们先来转化一下问题.对于一堵墙他的向下延伸的高度,我们是不用管的. 我们 ...

随机推荐

  1. 最长相同01数的子串(map搞搞)--牛客第三场 -- Crazy Binary String

    题意: 如题. 或者用我的数组分治也可以,就是有点愚蠢. //#include <bits/stdc++.h> #include <map> #include <iost ...

  2. Codeforces 1194F. Crossword Expert

    传送门 考虑每一个位置的期望贡献 $P[i]$ 对于第 $k$ 个位置,设 $sum=\sum_{i=1}^{k}t[k]$,那么 $T-sum$ 即为用最短时间完成完位置 $k$ 后多出来的空闲时间 ...

  3. Java 类的构造器中this()和super()的困惑

    关于构造器中super的使用,书本上这样写: “super是指向父类的引用,如果构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用.如果父类由没有默认的无参 ...

  4. leecode刷题(23)-- 合并两个有序链表

    leecode刷题(23)-- 合并两个有序链表 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2-> ...

  5. Http option 请求是怎么回事

    在前后台分离的项目中,经常会遇到浏览器想服务端发送一个post/patch请求,实际上产生了两个请求,一个是Option,另一个才是真实的Post/Patch请求, 而get请求则不会产生Option ...

  6. O003、准备 KVM 实验环境

    参考https://www.cnblogs.com/CloudMan6/p/5240770.html   KVM 是 OpenStack 使用的最广泛的Hypervisor,本节介绍如何搭建 KVM  ...

  7. qt webengineview 加载本地资源方式

    一.如果把资源添加到本地资源qrc库里了,请使用 ui->preview->setUrl(QUrl("qrc:/HelloWorld2.html")): 二.如果没有现 ...

  8. js 获取当前月份 第一天和最后一天

    js 获取当前月份 第一天和最后一天 var now = new Date(); //当前日期 var nowMonth = now.getMonth(); //当前月 var nowYear = n ...

  9. js 数据类型的判断

    1. typeof 运算符 typeof 可以判断基本数据类型: typeof 123; // "number" typeof 'abc'; // "string&quo ...

  10. RouterOS Firewall v6 流程图

    1. Firewall v5和Firewall v6对比图 2.Firewall v6的流程图