hdu4749 kmp改进
这题说的是给了一个模板串 然后又给了一个串 需要找出类似的按个模板串 , 改相等的位置要相等 该大于的位置到大于
我们将模板串做好失配指针就ok了,然后匹配和原来的匹配不同,这个匹配需要的是相对匹配,只要他们的相对位置相同就ok了,每次计算要插入的数在这个匹配中的排位
#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int maxn=;
int x[maxn],a[maxn],D[];
int F[maxn];
void getFail(int m)
{
F[]=; F[]=;
for(int i=; i<=m; i++)
{
int j=F[i];
while( j != && a[i] != a[j]) j = F[ j ];
F[i+]=( a[i] == a[j] )? j+ : ;
}
}
int perx[maxn][],pera[maxn][];
void init(int n, int m,int k)
{
memset(perx[],,sizeof(perx[]));
memset(pera[],,sizeof(pera[]));
for(int i=; i<=n; i++)
{
for(int j=; j<=k; j++)
perx[i][j]=perx[i-][j];
perx[i][ x[i] ]++;
}
for(int i=; i<=m; i++)
{
for(int j=; j<=k; j++)
pera[i][j]=pera[i-][j];
pera[i][a[i]]++;
}
}
bool vis[maxn];
bool jul(int xi, int aj)
{
int mii=,ei=,mij=,ej=;
for(int k=; k<x[xi]; k++)
mii+=perx[xi][k]-perx[xi-aj][k];
ei=perx[xi][ x[xi] ] - perx[ xi - aj ][ x[ xi ] ];
for(int k=; k<a[ aj ]; k++)
mij+=pera[ aj ][ k ];
ej=pera[ aj ][ a[aj] ];
return mii==mij&&ej==ei;
}
void find(int n,int m)
{
int j=;
for(int i=; i<=n; i++)
{
while(j!=&&jul(i,j)==false)j=F[j];
if(jul(i,j))j++;
if( j == m + )
{
vis[ i ]=true;j=F[j];
}
}
}
int main()
{
int n,m,k;
while(scanf("%d%d%d",&n,&m,&k)==)
{
memset(D,,sizeof(D));
for(int i=; i<=n; i++)
{
scanf("%d",&x[i]);
vis[i]=false;
}
for(int i=; i<=m; i++)
{
scanf("%d",&a[i]);
D[a[i]]=;
}
for(int i=; i<=k; i++)
D[i]=D[i]+D[i-];
for(int i=; i<=m; i++)
a[i]=D[a[i]];
getFail(m);
init(n,m,k);
find(n,m);
int ans=,loc=m;
while(loc<=n){
if(vis[loc]){
ans++;
loc+=m;
}else loc++;
}
printf("%d\n",ans);
}
return ;
}
hdu4749 kmp改进的更多相关文章
- hdu4749 kmp应用
呃,从网上看的题解,然而其实有点地方还没搞懂,先放在这,以后再回来理解. 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4749 题目:2013 is ...
- 字符串匹配(BF算法和KMP算法及改进KMP算法)
#include <stdio.h> #include <string.h> #include <stdlib.h> #include<cstring> ...
- c语言KMP匹配算法与字符串替换算法
一.字符串匹配算法 (1)传统匹配算法BF int Index_BF(char* S, char* T){ int i=1,j=1; while(i<=strlen(S) && ...
- kpm字符串匹配算法
首先是简单的朴素匹配算法 /* * 返回子串t在主串s的位置,若不存在则返回0 */ public static int index(String s, String t) { int i = 0;/ ...
- 大话数据结构(十二)java程序——KMP算法及改进的KMP算法实现
1.朴素的模式匹配算法 朴素的模式匹配算法:就是对主串的每个字符作为子串开头,与要连接的字符串进行匹配.对主串做大循环,每个字符开头做T的长度的小循环,直到成功匹配或全部遍历完成为止. 又称BF算法 ...
- KMP及其改进算法
本文主要讲述KMP已经KMP的一种改进方法.若发现不正确的地方,欢迎交流指出,谢谢! KMP算法的基本思想: KMP的算法流程: 每当一趟匹配过程中出现字符比较不等时,不需回溯 i 指针,而是利用已经 ...
- 【Java】 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)
本文根据<大话数据结构>一书,实现了Java版的串的朴素模式匹配算法.KMP模式匹配算法.KMP模式匹配算法的改进算法. 1.朴素的模式匹配算法 为主串和子串分别定义指针i,j. (1)当 ...
- 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)
--喜欢记得关注我哟[shoshana]-- 目录 1.朴素的模式匹配算法2.KMP模式匹配算法 2.1 KMP模式匹配算法的主体思路 2.2 next[]的定义与求解 2.3 KMP完整代码 2.4 ...
- KMP算法的改进
KMP算法的改进 KMP算法已经在极大程度上提高了子符串的匹配效率,但是仍然有改进的余地. 1. 引入的情景 下面我们就其中的一种情况进行分析: 主串T为"aaaabcde-" 子 ...
随机推荐
- PLSQL复合触发器
复合触发器范例 create or replace trigger compound_trigger for insert or update or delete on dept_x compound ...
- 【PyQt5-Qt Designer】按钮系列
[PyQt5-Qt Designer]按钮系列 复选框(QCheckBox) 效果如下: 参考: https://zhuanlan.zhihu.com/p/30509947 完整代码: from Py ...
- 前端HTML目录
前端 HTML 简介 前端 HTML文档结构介绍 前端 HTML文档 详解 前端 HTML 注释 前端 HTML标签介绍 前端 HTML的规范 前端 HTML 常用标签 head标签相关内容 前端 H ...
- 解决无法连接到 reCAPTCHA 服务
今天ytkah在查询一个信息时需要人机验证,但提示“无法连接到 reCAPTCHA 服务”,通过修改host文件可以解决相关问题,用editplus或notepad打开C:\Windows\Syste ...
- 解决因为Telnet没有启动导致FTP无法连接的问题
今天ytkah在其他电脑上想用ftp传点东西发现居然连接不上,查看了一下服务器安全组规则里的端口,也没有相关屏蔽.问了一下运维,他说可能是Telnet没有开启.就试着去看看有没问题.打开 控制面板 - ...
- ansible的安装及基本使用
1.安装ansible 如果没有版本和别的要求,这里直接使用yum安装 yum -y install ansible 查看版本 [root@ ~]#ansible --version ansible ...
- DNS服务基础原理介绍
FQDN 全称域名 localhost(主机名或者是别名).localdomain(域名) FQDN=主机名.域名 根域 . 顶级域名 .com .n ...
- FTP文件传输
FTP项目作业要求:1.用户加密认证2.允许同时多用户登录3.每个用户有自己的家目录,且只能访问自己的家目录4.对用户进行磁盘配额,每个用户的可用空间不同5.允许用户在ftp server上随意切换目 ...
- 转换区别json
private Date EndDate ; private Instant xxxxdate; private LocalDateTime localDateTime; public static ...
- [LeetCode] 154. Find Minimum in Rotated Sorted Array II_Hard
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...