题意:给定两个序列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变形!如何转换成KMP求解呢?
举一个例子说明一下:
a: 5 10 8 10 11 9 11 12 10 15
b: 4 2 4 5 3
根据题意 a中的 10 8 10 11 9 与 b是匹配的, 11 9 11 12 10跟b也是匹配的!
如何将b串以及 10 8 10 11 9, 以及 11 9 11 12 10转换成同一个串?这样好套用kmp啊!
因为对应的数值的差值都是相同的! 令a[i]-=a[i+1], b[i]-=b[i+1]!
这样也就是将串的长度减少了1,这样就可以套kmp模板了!
别忘记对特殊情况考虑一下!

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cstring>
 6 #define N 200005
 7 using namespace std;
 8
 9 int f[N], a[N], b[N];
10 int n, w;
11 void getFail(){
12     f[0]=0; f[1]=0;
13     for(int i=1; i<w; ++i){
14         int j=f[i];
15         while(j && b[i] != b[j]) j=f[j];
16         if(b[i] == b[j]) f[i+1] = j+1;
17         else f[i+1] = 0;
18     }
19 }
20
21 void findText(){
22     int j=0;
23     int cnt = 0;
24     for(int i=0; i<n; ++i){
25         while(j && a[i] != b[j])  j=f[j];
26         if(a[i] == b[j]) ++j;
27         if( j == w ) ++cnt;
28     }
29     printf("%d\n", cnt);
30 }
31
32 int main(){
33     scanf("%d%d", &n, &w);
34     for(int i=0; i<n; ++i){
35         scanf("%d", &a[i]);
36         if(i) a[i-1] -= a[i];
37     }
38
39     for(int i=0; i<w; ++i){
40         scanf("%d", &b[i]);
41         if(i) b[i-1] -= b[i];
42     }
43     if(n==1 && w==1){
44         printf("%d\n", 1);
45         return 0;
46     }
47     else if(n==1){
48         printf("%d\n", 0);
49         return 0;
50     }
51     else if( w==1 ){
52         printf("%d\n", n);
53         return 0;
54     }
55     --n;
56     --w;
57     b[w] = -1e6;
58     getFail();
59     findText();
60     return 0;
61 }

View Code

codeforces MUH and Cube Walls相关推荐

  1. codeforces D MUH and Cube Walls(kmp)

    先分别计算a,b数组的差分,得到两个数组,文本数组和模式数组,然后使用kmp统计模式数组在文本数组出现个数.对于b数组长度为1时,结果就是数组a的长度. 代码参考: OJ/codeforces/471 ...

  2. Codeforces 471 D MUH and Cube Walls

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

  3. codeforces MUH and Important Things

    /* 题意:给一个序列,表示每一项任务的难度,要求完成每一项任务的循序是按照难度由小到大的!输出三种符合要求的工作顺序的序列! 思路:直接看代码.... */ 1 #include<iostre ...

  4. linux mint 下载迅雷安装包,Linux Mint如何安装“微信、QQ、迅雷、WPS办公软件”等国内上瘾软件...

    Ubuntu14-04 MySQL-5.6.21通用二进制安装 #卸载mysql /etc/init.d/mysqld stop &> /dev/null killall mysqld ...

  5. Prefix function. Knuth–Morris–Pratt algorithm

    Prefix function. Knuth–Morris–Pratt algorithm Prefix function definition You are given a string \(s\ ...

  6. 前缀函数及kmp算法

    1.字符串基础 1.1 字符集 一个字符集是一个建立了全序关系的集合,也就是说中的任意两个不两只的元素和都可以比较大小,要么,要么.字符集中的元素称为字符. 1.2 字符串 一个字符串S是将n个字符顺 ...

  7. 算法笔记--KMP算法 EXKMP算法

    1.KMP算法 这个博客写的不错:http://www.cnblogs.com/SYCstudio/p/7194315.html 模板: next数组的求解,那个循环本质就是如果相同前后缀不能加上该位 ...

  8. BFS Codeforces Round #297 (Div. 2) D. Arthur and Walls

    题目传送门 1 /* 2 题意:问最少替换'*'为'.',使得'.'连通的都是矩形 3 BFS:搜索想法很奇妙,先把'.'的入队,然后对于每个'.'八个方向寻找 4 在2*2的方格里,若只有一个是'* ...

  9. Codeforces Round #297 (Div. 2)D. Arthur and Walls 搜索bfs

    题目链接: http://codeforces.com/contest/525/problem/D 题意 给你一个n*m的田地,有一些*的地方是可以移除变成"."的,然后问你移除最 ...

最新文章

  1. Tiny4412 Uboot
  2. mysql 触发器死循环_请教如何避免该条触发器的死循环
  3. 【UGV】Mec 麦轮版小车结合角度传感器实现直线行走示例
  4. mysql 事务值被改变_面试被问MySQL 事务的实现原理,怎么破?
  5. C语言高级编程:预处理中的 # 和 ##
  6. poj 2976 Dropping tests 01分数规划
  7. android webview 像素,Android:在WebView中加载的图像中的像素质量降低
  8. zepto源码--filtered, contains,funcArg,setAttribute,className,deserializeVale--学习笔记
  9. c语言编程中的幂函数如何编写,c语言幂函数_C语言循环与递归实现整数幂函数...
  10. 好消息!电商工具箱API详情接口,更全面
  11. H3C-云计算技术专题培训(分享六)
  12. matlab上位机电机,基于MATLAB的电机综合性能测试系统上位机软件设计
  13. Axure 教程 |中级电子商务网站设计
  14. 智能聊天机器人微信小程序
  15. 机械中计算机的应用研究,机械设计制造及其自动化中计算机技术的应用研究
  16. linux内核教学的全套视频,中科大老师全程讲解Linux内核分析视频教程《附加介绍+总结》共23节课...
  17. form表单提交编码介绍
  18. 视频去水印的方法-视频怎么去水印视频教程
  19. 面向垂直行业的5G核心网关键技术演进分析
  20. JAVA开发运维(DevOps过程)

热门文章

  1. Hbuilder MUI里面使用java.net.URL发送网络请求,操作cookie
  2. 嵌入式开发之zynq——zynq开发环境搭建
  3. Linux指定网卡工作模式
  4. 应对电信劫持强行插入广告的处理
  5. python中如何跳出多层循环
  6. 一个关于malloc的面试题
  7. Config Sharepoint 2013 Workflow PowerShell Cmdlet
  8. 有关RSA 命令总结
  9. PL/SQL 包的概念及创建使用
  10. [na]vrrp两用(网关冗余+服务器热备)