kmp变形,带通配符的kmp——华科校赛E 好题
https://blog.csdn.net/a302549450/article/details/80948741?tdsourcetag=s_pctim_aiomsg
上面是题解的链接。。,
其实和kmp算法差不多,但是匹配的过程多了一些情况,还是挺有思维性的
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define PI acos(-1)
#define INF 0x3f3f3f3f
#define NUM 101000
#define debug false
#define ll long long
#define lowbit(x) ((-(x))&(x))
#define ffor(i,d,u) for(int i=(d);i<=(u);++i)
#define _ffor(i,u,d) for(int i=(u);i>=(d);--i)
#define mst(array,Num) memset(array,Num,sizeof(array))
const int p = 1e9+;
int n,k,m,_next[NUM],a[NUM<<],b[NUM],ori[NUM<<],par[NUM],pos[];
int ans=;
template <typename T>
void read(T& x)
{
x=;
char c;
while((c=getchar())<''||c>'');
do((x*=)+=((int)(c-'')));while((c=getchar())>=''&&c<='');
}
template <typename T>
void write(T x)
{
int len=;char c[];
if(x<)putchar('-');
x=abs(x);
do{++len;c[len]=(char)((x%)+'');}while(x/=);
_ffor(i,len,)putchar(c[i]);
}
void build()
{
mst(pos,-);
par[]=-;
pos[b[]]=;
ffor(i,,m)
{
if(pos[b[i]]!=-)
par[i]=i-pos[b[i]];
else
par[i]=-;
pos[b[i]]=i;
}
mst(pos,-);
ori[]=-;
pos[a[]]=;
ffor(i,,n)
{
if(pos[a[i]]!=-&&i-pos[a[i]]<m)
ori[i]=i-pos[a[i]];
else
ori[i]=-;
pos[a[i]]=i;
}
}
int getnext(int x)
{
int i;
i=_next[x];
while(i!=- && par[i+]!=par[x+] && par[i+]!=- )i=_next[i];
return i+;
}
bool pd(int x,int y)
{ //母串的x和模式串的y相等 或者 模式串的y无前驱且(y前的长度比x前驱小)
return (ori[x]==par[y] || (par[y]==- && ((y-ori[x])<)));
}
void kmp()
{
_next[]=-;_next[]=;
ffor(i,,m)
_next[i]=getnext(i-);
int i=,j=;
while(j<n)
{
while(i<m&&j<n&&pd(j+,i+)){++i;++j;}
if(i==m)++ans;
if(j==n)break;
while(i==m||(i!=-&&!pd(j+,i+)))i=_next[i];
if(i==-)
{
++i;
++j;
}
}
}
void AC()
{
read(n),read(k);
ffor(i,,n)
read(a[i]);
read(m);
ffor(i,,m)
read(b[i]);
build();
kmp();
write(ans);
}
int main()
{
AC();
return ;
}
kmp变形,带通配符的kmp——华科校赛E 好题的更多相关文章
- HZNU第十二届校赛赛后补题
愉快的校赛翻皮水! 题解 A 温暖的签到,注意用gets #include <map> #include <set> #include <ctime> #inclu ...
- ZOJ 3955 Saddle Point 校赛 一道计数题
ZOJ3955 题意是这样的 给定一个n*m的整数矩阵 n和m均小于1000 对这个矩阵删去任意行和列后剩余一个矩阵为M{x1,x2,,,,xm;y1,y2,,,,,yn}表示删除任意的M行N列 对于 ...
- Fire Air(华科校赛 网络赛)
题目 原题链接:https://www.nowcoder.com/acm/contest/106/L 在100000 * 10000的空地上,有n个时间点,每个时间点会在(xi,yi)上种一棵树. 定 ...
- 牛客网-湘潭大学校赛重现H题 (线段树 染色问题)
链接:https://www.nowcoder.com/acm/contest/105/H来源:牛客网 n个桶按顺序排列,我们用1~n给桶标号.有两种操作: 1 l r c 区间[l,r]中的每个桶中 ...
- 算法笔记_216:第六届蓝桥杯软件类校赛部分真题(Java语言C组)
目录 1 题目一 2 题目二 3 题目三 4 题目四 5 题目五 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 二项式的系数规律,我国数学家很早就发现了. 如[图1.png],我国南宋数学 ...
- 算法笔记_215:第六届蓝桥杯软件类校赛部分真题(Java语言B组)
目录 1 题目一 2 题目二 3 题目三 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 题目一 java中提供了对正则表达式的支持. 有的时候,恰当地使用正则,可以让我们的工作事半功倍! 如下代码 ...
- 校赛F
问题描述 例如对于数列[1 2 3 4 5 6],排序后变为[6 1 5 2 4 3].换句话说,对于一个有序递增的序列a1, a2, a3, ……, an,排序后为an, a1, an-1, a2, ...
- HDU 4749-Parade Show(KMP变形)
题意: 给出一个母串和一个模式串求母串中最多能分成最大的子串数(每个字串中的各个数字的大小关系和模式串相同) 分析: KMP变形匹配规则变一下即可,用当前数字和下个数字的差表示,大小关系方便匹配 #i ...
- 大话数据结构(十二)java程序——KMP算法及改进的KMP算法实现
1.朴素的模式匹配算法 朴素的模式匹配算法:就是对主串的每个字符作为子串开头,与要连接的字符串进行匹配.对主串做大循环,每个字符开头做T的长度的小循环,直到成功匹配或全部遍历完成为止. 又称BF算法 ...
随机推荐
- 项目警告:There are multiple modules with names that only differ in casing.This can lead to unexpected behavior when compiling on a filesystem with other case-semantic.Use equal casing. Compare these modul
记录个自己遇到的问题: 上星期项目刚拉取下来的时候运行没有任何警告,晚上回去vscode提示更新新的东西,当时没管就立即更新了,第二天重启项目直接一大堆警告冒了出来: There are multip ...
- 按钮与js事件先后顺序
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 防HTTP慢速攻击的nginx安全配置
概述 慢速攻击,是一种ddos攻击的变体版本.通常来说,它通过向服务器发送正常的请求,只不过请求的头或者请求体的内容特别长,发送速度有特别慢,这样每一个连接占用的时间就会变得特别长,攻击者会在短时 ...
- 关于使用vue时的个人规范
js文件: 公共功能文件:common_功能名.js 例:common_ajax.js 页面级功能文件(在不同页面复用):page_功能名.js 放置在html文件中加载的js文件命名:app_htm ...
- js特效玫瑰花
<script> var b = document.body; var c = document.getElementsByTagName('canvas')[0]; var a = c. ...
- SpringMVC 拦截器原理
前言 SpringMVC 拦截器也是Aop(面向切面)思想构建,但不是 Spring Aop 动态代理实现的, 主要采用责任链和适配器的设计模式来实现,直接嵌入到 SpringMVC 入口代码里面. ...
- bzoj1036题解
[解题思路] 直接上树剖套线段树/BIT即可.复杂度o(n+qlog22n)(线段树)或o(n+qlog23n)(BIT). [参考代码] 树剖套BIT.(这个树剖好naive啊QAQ) #inclu ...
- NX二次开发-将对象移动到图层UF_OBJ_set_layer
#include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <uf_layer.h&g ...
- Css实现Div在页面上垂直居中显示
方法一 <html> <head> <title>垂直居中</title> <style type=" ...
- 基于SPI的数据报过滤原理与实现
一.个人防火墙技术概述 随着网络安全问题日益严重,广大用户对网络安全产品也越来越关注.防火墙作为一种网络安全工具,早已受到大家的青睐.在PC机上使用的个人防火墙,很大程度上成为广大网民的安全保护者.W ...