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-" 子 ...
随机推荐
- 2018/04/24 PHP 设计模式之注册树模式
之前学习了工厂模式和单例模式,明白了他们的意义. 但是我们在之后的使用中会发现一个问题,在新建一个实例的时候还是需要调用一个单例或者工厂,之后还是造成了代码和耦合和不好处理. 下面开始说一下: -- ...
- 内置函数time
time import time.time() # 浮点型,给计算机看,随机 时间有三种: First: 时间戳 (time.time()) Second: 结构化时间 可以修改 Third: ...
- Ext.app.Application
代表性的ExtJS应用程序,通常是用Ext.container.Viewport创建的经典的单页面应用程序. 一个程序由一个或多个视图(View)组成.视图的行为表现由它对应的视图控制器(Ext.ap ...
- Java Swing界面编程(18)---单行文本输入组件:JTextField
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/xuejiawei123/article/details/27565407 下面的程序与上一例有一点差 ...
- AlertWindowManager 弹出提示窗口使用帮助(上)
LookAndFeel(界面外观): NativeStyle:本地化界面为真实用系统内置外观 SkinName:本地化界面(NativeStyle:)设置为假可使用皮肤外观 OptionAnimate ...
- 常见Chrome 插件
Chrome插件网:http://chromecj.com/downloadstart.html Chrome浏览器:http://chromecj.com/chrome/2014-09/177.ht ...
- .ashx文件与.ashx.cs
如果项目是“新建网站”,添加的ashx是没有ashx.cs的:如果是新建"asp.net web 应用程序",添加的ashx是有ashx.cs的. 今天做项目测试遇到一个问题,因为 ...
- golang 对struct进行Serialize的方法,即将存取二进制文件到struct的方法
方法一: serialize 的标准方法: 使用gob 和 base64 或 base58. 方法二: 下面是自己实现的 serialize 方法,不推荐自己实现,应该用标准方法. 代码如下: pac ...
- 多线程——Executor、ExecutorService、Executors三者的区别
Executor.ExecutorService.Executors三者的区别: 层次关系: public interface ExecutorService extends Executor {} ...
- 如何在CentOS 7中安装最新Git(源码安装)
如何在CentOS 7中安装最新Git 2017年05月20日 11:49:53 阅读数:1624 Git是在今天的软件开发行业一个非常有用的版本控制工具.我一直使用Git.于是为Linux公社的读者 ...