3945 完美拓印

codevs月赛 第一场

时间限制: 1 s

空间限制: 256000 KB

题目等级 : 黄金 Gold

题目描述 Description

小Q获得了一个神奇的印章,这个印章宽n个单位长度,印章的其中三个棱都是直的,而另外一个方向上,对于每个单位宽度的部分,是一样直的,并且与反方向的棱平行,如下图所示。

小Q的印章上有一个不关于中心对称的图形(不一定是上图的Qrz),他现在要在一张地图上拓上印,地图上有一段个m单位长度、近似水平的边界线,但是放大到单位长度时还是有一定的高低差异,但对于单位宽度的部分,是一样直的,与水平轴线垂直,如下图所示。

小Q希望自己的印章一边的边缘能恰好地与边界线重合(不能部分重合、不能越过边界线),他现在只可以将印章旋转180度或者不旋转(这样印章可能存在有两边可以与边界线重合的情况),然后平移到适当的位置,问小Q有多少种可行的方案,两种方案不同被定义为两种方案用印章印出的图案互不重合。

输入描述 Input Description

第一行两个正整数n和m,表示印章的宽度和截取边界线的长度。

第二行n个正整数,表示印章从左到右每个单位宽度对应的两条平行线之间的距离。

第三行m个整数,表示所截取边界线从左到右每个单位宽度对应的竖直方向上的坐标。

输出描述 Output Description

一个整数,表示可行方案的种类数。

样例输入 Sample Input

5 12

3 4 4 3 2

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

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

对于30%的数据,有n*m≤2*107

对于60%的数据,有n,m≤105

对于100%的数据,有n,m≤106,所有数字的绝对值不超过109

【思路】

字符串匹配。

将一面的凹凸情况作为一面的特征,如果两面的凹凸状况相同则可以印章,则问题转化为求两种凹凸状况的匹配数目,可以用KMP算法求解。

需要注意的是:

1、   底边也可以匹配。

2、   当n==1的时候应该特判(PT数组)。

【代码】

 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; const int maxn = +; int a[maxn],b[maxn],P[maxn],T[maxn],f[maxn];
int n,m,ans; void get_Fail() {
f[]=f[]=;
for(int i=;i<n;i++) {
int j=f[i];
while(j && P[i]!=P[j]) j=f[j];
f[i+]=P[i]==P[j]?j+:;
}
} int KMP() {
get_Fail();
int j=,cnt=;
for(int i=;i<m;i++) {
while(j && T[i]!=P[j]) j=f[j];
if(T[i]==P[j]) j++;
if(j==n) cnt++,j=f[j];
}
return cnt;
} int main() {
scanf("%d%d",&n,&m);
for(int i=;i<n;i++) scanf("%d",&a[i]);
for(int i=;i<m;i++) scanf("%d",&b[i]);
if(n==) {
printf("%d\n",m*);
return ;
} n--; m--;
for(int i=;i<n;i++) P[i]=a[i+]-a[i];
for(int i=;i<m;i++) T[i]=b[i+]-b[i];
ans += KMP(); for(int i=;i<n;i++) P[i]=a[n-i]-a[n-i-];
ans += KMP(); for(int i=;i<n;i++) P[i]=;
ans += *KMP(); printf("%d\n",ans);
return ;
}

codevs3945 完美拓印的更多相关文章

  1. codevs 3945 完美拓印 (KMP)

    题目大意:给你一个神奇的印章,他左右下三个面都是直的,上面是凸凹不平的面(凸凹都平行于别的面).然后给你一个轮廓线,如果一个面能与轮廓线完全重合,可以把印章的这个沿着轮廓线拓印,求所有的拓印方案. 把 ...

  2. 【codevs3945】 完美拓印

    http://codevs.cn/problem/3945/ (题目链接) 题意 给出一个诡异的图形,再给出一个歪七扭八的线,问图形上下两条边与线的匹配→_→ Solution 前后求差然后KMP,这 ...

  3. 记codevs第一次月赛

    第一次参加这种有奖励的比赛(没错,我就是为猴子而去的 一年没怎么碰代码果然手生,还是用没写多久的C++,差点全跪了 T1数学奇才琪露诺: 首先定义一个函数F(x),F(x)=x的各个数位上的数字和 然 ...

  4. DP × KMP

    几道用到KMP的DP题: hdu 5763    hdu 3689    hdu 3336    codeforces 494B    codevs 3945 关于KMP的nx数组: 如果在本文中看见 ...

  5. Self-organizing Maps及其改进算法Neural gas聚类在异常进程事件识别可行性初探

    catalogue . SOM简介 . SOM模型在应用中的设计细节 . SOM功能分析 . Self-Organizing Maps with TensorFlow . SOM在异常进程事件中自动分 ...

  6. Java设计模式之《模板模式》及使用场景

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9558825.html 模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框 ...

  7. Java设计模式之模板模式及使用场景

    模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义了模板,我们的剩余工作就是对其进行充实.丰润,完善它的不足之处. 定义模板采用抽象类 ...

  8. 权益保护-知识产权:知识产权(IP)百科

    ylbtech-权益保护-知识产权:知识产权(IP)百科 知识产权,也称其为“知识所属权”,指“权利人对其智力劳动所创作的成果和经营活动中的标记.信誉所依法享有的专有权利”,一般只在有限时间内有效.各 ...

  9. 【JAVA今法修真】 第八章 仙道万维网 圣地元宇宙

    您好,我是南橘,万法仙门的掌门,刚刚从九州世界穿越到地球,因为时空乱流的影响导致我的法力全失,现在不得不通过这个平台向广大修真天才们借去力量.你们的每一个点赞,每一个关注都是让我回到九州世界的助力,兄 ...

随机推荐

  1. RegistryKey 类

    表示 Windows 注册表中的项级节点. 此类是注册表封装. 继承层次结构 System.Object   System.MarshalByRefObject    Microsoft.Win32. ...

  2. c# 为什么要用 get set 属性

    1 可以对赋值 做验证 ,范伟限制,额外的限制 2 可以设置 只读 只写 3 可以做线程同步 4 可以将属性设置在interface接口中 5 可以使用虚属性 或 抽象属性 可以填补 没有 虚字段 抽 ...

  3. OpenCart 之registry功用

    1. “Registry”设计模式 在OpenCart中,Registry是整个系统的信息中枢. Registry是一个单例(Singleton),在index.php起始页面中, 首先作为构造函数参 ...

  4. CI 笔记3 (easyui 的layout布局,最小化layout原型)

    在做easyui的layout的布局时,最小化一个原型,分2步,一个是div的父标签,一个是body做父标签,全屏的. 步骤分别为: 在设置的5个区中,div的最后一个,必须是data-options ...

  5. OC - 30.如何封装自定义布局

    概述 对于经常使用的控件或类,通常将其分装为一个单独的类来供外界使用,以此达到事半功倍的效果 由于分装的类不依赖于其他的类,所以若要使用该类,可直接将该类拖进项目文件即可 在进行分装的时候,通常需要用 ...

  6. iOS 去除导航栏下的黑线

    Swift: navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) na ...

  7. 【转】无废话WCF系列教程

    转自:http://www.cnblogs.com/iamlilinfeng/category/415833.html     看后感:这系列的作者李林峰写得真的不错,通过它的例子,让我对WCF有了一 ...

  8. php微信支付接口开发程序

    php微信支付接口开发程序讲解 微信支付接口现在也慢慢的像支付宝一个可以利用api接口来实现第三方网站或应用进行支付了, 下文整理了一个php微信支付接口开发程序并且己测试,有兴趣的朋友可进入参考. ...

  9. JQuery jsonp使用小记

    在一个不支持PHP的主机上,需要对某些页面做访问统计.我的方案是在静态的HTML页面上,用JSONP向能够执行PHP的主机进行跨域请求,从而使用PHP解决这个访问量统计问题. 在服务器端,PHP页面返 ...

  10. Android编译输出 资源指定AAPT

    BoardConfigCommon.mk # Default Command lineSEC_DEV_APP_LOCAL_AAPT_FLAGS := -c sw360dpSEC_DEV_FRAMEWO ...