【codevs3945】 完美拓印
http://codevs.cn/problem/3945/ (题目链接)
题意
给出一个诡异的图形,再给出一个歪七扭八的线,问图形上下两条边与线的匹配→_→
Solution
前后求差然后KMP,这种数字的匹配还是KMP靠谱,hash太容易冲突了。
细节
注意可以上下翻转有4种匹配方式
代码
// codevs3945
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=1000010;
int next[maxn],t[maxn],p[maxn],a[maxn],b[maxn];
int n,m; void calnext() {
next[1]=0;
for (int i=2,j=0;i<=n;i++) {
while (j && p[j+1]!=p[i]) j=next[j];
if (p[j+1]==p[i]) j++;
next[i]=j;
}
}
int kmp() {
calnext();
int cnt=0;
for (int j=0,i=1;i<=m;i++) {
while (j && t[i]!=p[j+1]) j=next[j];
if (t[i]==p[j+1]) j++;
if (j==n) cnt++,j=next[j];
}
return cnt;
}
int main() {
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
for (int j=1;j<=m;j++) scanf("%d",&b[j]);
if (n==1) {printf("%d",m*4);return 0;}
n--,m--;int ans=0;
for (int i=1;i<=n;i++) p[i]=a[i+1]-a[i];
for (int i=1;i<=m;i++) t[i]=b[i+1]-b[i];
ans+=kmp();
for (int i=1;i<=n;i++) p[i]=a[n-i+2]-a[n-i+1];
ans+=kmp();
for (int i=1;i<=n;i++) p[i]=0;
ans+=2*kmp();
printf("%d\n",ans);
return 0;
}
【codevs3945】 完美拓印的更多相关文章
- codevs3945 完美拓印
		
3945 完美拓印 codevs月赛 第一场 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 小Q获得了一个神奇的印章,这个印章宽n ...
 - codevs 3945 完美拓印 (KMP)
		
题目大意:给你一个神奇的印章,他左右下三个面都是直的,上面是凸凹不平的面(凸凹都平行于别的面).然后给你一个轮廓线,如果一个面能与轮廓线完全重合,可以把印章的这个沿着轮廓线拓印,求所有的拓印方案. 把 ...
 - 记codevs第一次月赛
		
第一次参加这种有奖励的比赛(没错,我就是为猴子而去的 一年没怎么碰代码果然手生,还是用没写多久的C++,差点全跪了 T1数学奇才琪露诺: 首先定义一个函数F(x),F(x)=x的各个数位上的数字和 然 ...
 - DP × KMP
		
几道用到KMP的DP题: hdu 5763 hdu 3689 hdu 3336 codeforces 494B codevs 3945 关于KMP的nx数组: 如果在本文中看见 ...
 - Self-organizing Maps及其改进算法Neural gas聚类在异常进程事件识别可行性初探
		
catalogue . SOM简介 . SOM模型在应用中的设计细节 . SOM功能分析 . Self-Organizing Maps with TensorFlow . SOM在异常进程事件中自动分 ...
 - Java设计模式之《模板模式》及使用场景
		
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9558825.html 模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框 ...
 - Java设计模式之模板模式及使用场景
		
模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义了模板,我们的剩余工作就是对其进行充实.丰润,完善它的不足之处. 定义模板采用抽象类 ...
 - 权益保护-知识产权:知识产权(IP)百科
		
ylbtech-权益保护-知识产权:知识产权(IP)百科 知识产权,也称其为“知识所属权”,指“权利人对其智力劳动所创作的成果和经营活动中的标记.信誉所依法享有的专有权利”,一般只在有限时间内有效.各 ...
 - 【JAVA今法修真】 第八章 仙道万维网 圣地元宇宙
		
您好,我是南橘,万法仙门的掌门,刚刚从九州世界穿越到地球,因为时空乱流的影响导致我的法力全失,现在不得不通过这个平台向广大修真天才们借去力量.你们的每一个点赞,每一个关注都是让我回到九州世界的助力,兄 ...
 
随机推荐
- JSTL中的TLD配置和使用。
			
一,JSTL介绍: JSTL标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一 ...
 - DataReader用法
			
一.DataReader含义 DataReader相比于DataSet,DataReader是一个抽象类,所以不能用DataReader DR = new DataReader(),来构造函数创建对象 ...
 - [xen]XenServer6.2增加第二块盘&vm开启自动启动&图形化安装centos
			
很多服务器都会多块盘或者做了Raid的多个虚拟磁盘,而安装xenserver后,他只会默认挂载第一快盘,也就是安装xenServer系统的那块. 为XenServer6.2挂载/增加第二块硬盘的方法 ...
 - JS多异步之间的协作方案
			
场景:使用工具函数downloadAllAsync接收一个URL数组并下载所有文件,结果返回一个存储了文件内容的数组,每个URL对应一个字符串. 好处:downloadAllAsync并不只有清理嵌套 ...
 - .NET 4.0 任务(Task)
			
随着 .NET 4.0的到来,她与以前各版本的一个明显差别就是并行功能的增强,以此来适应这个多核的世界.于是引入了一个新概念---任务,作为支持并行运算的重要组成部分,同时,也作为对线程池的一个补充和 ...
 - IntelliJ IDEA 13试用手记(附详细截图)
			
从去年开始转java以来,一直在寻找一款趁手的兵器,eclipse虽然是很多java程序员的首选,但是我发现一旦安装了一些插件,workspace中的项目达到数10个以后,经常崩溃,实在影响编程的心情 ...
 - jboss:在standalone.xml中设置系统属性(system-properties)
			
就象在.net的web应用中,可以在web.config中设置appSettings一样,jboss的standalone.xml中也可以由开发人员自行添加系统属性,用法如下: </extens ...
 - Java多线程之Runable与Thread
			
Java多线程是Java开发中的基础内容,但是涉及到高并发就有很深的研究可做了. 最近看了下<Java并发实战>,发先有些地方,虽然可以理解,但是自己在应用中很难下手. 所以还是先回顾一下 ...
 - shell 使用
			
echo -e "1\t2\t3" #-e echo -e "\e[1;31m This is red text \e[0m" #color echo -e & ...
 - WPF 让子元素动起来!
			
在没有接触Blend之前,自己整出了一个MultiTouchHelper,这东西是做什么的呢?就是利用附加属性让元素可以多点触控. 然后某一天发现Blend里面有一个Behavior的东西,我去,原来 ...