uva11019矩阵匹配器D316
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
int c[][];
int mx,nx,m,n;
struct AC
{
int ch[][];
int cnt;
int value[],fail[],last[],next[];
AC(){memset(next,,sizeof(next));memset(ch,,sizeof(ch));cnt=;memset(value,,sizeof(value));memset(fail,,sizeof(fail));memset(last,,sizeof(last));}
void trie(char *s,int v)
{
int now=,len=strlen(s);
for(int i=;i<len;i++)
{
if(!ch[now][s[i]-'a']) ch[now][s[i]-'a']=++cnt;
now=ch[now][s[i]-'a'];
}
if(value[now])
{
next[v]=value[now];
}
value[now]=v;
}
void getfail()
{
queue<int>q;
for(int i=;i<;i++){if(ch[][i]) q.push(ch[][i]);}
while(!q.empty())
{
int now=q.front();q.pop();
for(int i=;i<;i++)
{
int u=ch[now][i];
if(!u){ch[now][i]=ch[fail[now]][i];continue;}
int t=fail[now];
while(t&&!ch[t][i]) t=fail[t];
fail[u]=ch[t][i];
last[u]=value[fail[u]]?fail[u]:last[fail[u]];
q.push(u);
}
}
}
void add(int now,int h,int i)
{
if(now)
{
if(h-value[now]+>=) c[h-value[now]+][i]++;
int t=value[now];
while(next[t])
{
t=next[t];
if(h-t+>=) c[h-t+][i]++;
}
add(last[now],h,i);
}
}
void find(char *s,int h)
{
int len=strlen(s);
int now=;
for(int i=;i<len;i++)
{
now=ch[now][s[i]-'a'];
if(value[now]) add(now,h,i);
else add(last[now],h,i);
}
}
}ac;
int main()
{
int ans=;
char chh[][];
scanf("%d%d",&mx,&nx);
for(int i=;i<mx;i++)scanf("%s",chh[i]);
scanf("%d%d",&m,&n);
for(int i=;i<=m;i++)
{
char temp[];
scanf("%s",temp);
ac.trie(temp,i);
}
ac.getfail();
for(int i=;i<mx;i++) ac.find(chh[i],i);
for(int i=;i<mx;i++)
for(int j=;j<nx;j++) if(c[i][j]==m) ans++;
cout<<ans;
}
| 矩阵匹配器D316 | 
| 难度级别:C; 运行时间限制:1500ms; 运行空间限制:262144KB; 代码长度限制:2000000B | 
| 
 试题描述 
 | 
| 
 给你一个sx*sy的小矩阵和一个mx*my的大矩阵,请你求出小矩阵在大矩阵中出现的次数 
 | 
| 
 输入 
 | 
| 
 第一行两个正整数mx,my 
接下来跟一个mx行my列的大矩阵 又接下来两个正整数sx,sy 再接下来跟一个sx行sy列的小矩阵  | 
| 
 输出 
 | 
| 
 小矩阵在大矩阵中出现的次数 
 | 
| 
 输入示例 
 | 
| 
 3 3 
abc bca caa 2 2 bc ca  | 
| 
 输出示例 
 | 
| 
 2 
 | 
| 
 其他说明 
 | 
| 
 数据范围:sx≤mx≤1000,sy≤my≤1000 sx,sy≤100 
 | 
uva11019矩阵匹配器D316的更多相关文章
- UVA 11019 Matrix Matcher 矩阵匹配器 AC自动机 二维文本串查找二维模式串
		
链接:https://vjudge.net/problem/UVA-11019lrjP218 matrix matcher #include<bits/stdc++.h> using na ...
 - [Google Guava]字符串处理:连接器、拆分器、字符匹配器
		
一.连接器[Joiner] 二.拆分器[Splitter] 三.字符匹配器[CharMatcher] 四.字符集[Charsets] Charsets:针对所有Java平台都要保证支持的六种字符集提供 ...
 - Junit 断言 assertThat Hamcrest匹配器
		
junit断言总结本文参考了http://blog.csdn.net/wangpeng047/article/details/9628449一 junit断言1.JUnit框架用一组assert方法封 ...
 - EassyMock实践 自定义参数匹配器
		
虽然easymock中提供了大量的方法来进行参数匹配,但是对于一些特殊场合比如参数是复杂对象而又不能简单的通过equals()方法来比较,这些现有的参数匹配器就无能为力了.easymock为此提供了I ...
 - 前端测试框架Jest系列教程 -- Matchers(匹配器)
		
写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...
 - Flask入门之自定义过滤器(匹配器)
		
1. 动态路由的匹配器? 不知道这种叫啥名,啥用法,暂且叫做匹配器吧. Flask自带的匹配器可以说有四种吧(保守数字,就我学到的) 动态路由本身,可以传任何参数字符串或者数字,如:<user ...
 - 【Jest】笔记二:Matchers匹配器
		
一.前言 什么是匹配器? 我们可以把匹配器看成,testng断言,这么理解就可以了 二.常用的匹配器 test('two plus two is four', () => { expect(2 ...
 - BF匹配器
		
对于BF匹配器,首先我们得用cv2.BFMatcher()创建BF匹配器对象.它取两个可选参数,第一个是normType.它指定要使用的距离量度.默认是cv2.NORM_L2.对于SIFT,SURF很 ...
 - Rspec: everyday-rspec实操。FactoryBot预构件  (rspec-expectations gem 查看匹配器) 1-4章
		
总文档连接: RSpec.info/documentation/ 包括core, expectiation,rails , mock, 点击最新版本,然后右上角搜索class, method. 第3章 ...
 
随机推荐
- 【02】webstorm配置babel转换器+截图(by魔芋)
			
[02]webstorm配置babel转换器+截图(by魔芋) [02]魔芋的安装过程 01,配置babel. 02,用webstorm.注意webstorm的版本号. 03,使用 ...
 - (原) Unreal创建自定义MeshCompoent
			
@author:白袍小道 随缘查看 前言: 绘制相关类 MeshCompoent 模型组件 FVertexBuffer 顶点缓冲区封装 FIndexBuffer 顶点索引缓冲区封装 FRHIResou ...
 - Code Blocks中配置OpenGL方法
			
关于在Code Blocks中配置OpenGL的方法,在网上一直没有找到实用的方法,后来在马龙师兄的帮助下终于配置成功了,现把配置过程记录如下. (1)下载codeblocks,最好是带mingw的版 ...
 - shell sort 排序大讨论
			
转自http://roclinux.cn 本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. === [正文开始]有时候学 ...
 - asp.net连接SQL server,SQLLite,Oracle,Access数据库
			
asp.net中连接数据库有两种方式为appSettings和connectionStrings connectionStrings比较常用,所以只讲一下connectionStrings方式的连接 ...
 - Linux运维文档之nginx
			
NGINX安装配置1.检查并且安装依赖组件检查安装nginx的依赖性,nginx的模块需要第三方库的支持,检查是否安装下列库:zlib.zlib-devel.openssl.openssl-devel ...
 - Redis Sorted Set
			
Redis Sorted Set Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合 ...
 - P1447 [NOI2010]能量采集
			
题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得非常整齐,一共 ...
 - [洛谷P3805]【模板】manacher算法
			
题目大意:给你一个字符串,求出它的最长回文字段 题解:$manacher$算法 卡点:$p$数组未开两倍空间 C++ Code: #include <cstdio> #include &l ...
 - 块元素包裹img空隙问题
			
解决方法 1.img设为block2.img对齐方式vertical-align:bottom(middle/top),不是baseline就行3.父容器font-size:0或line-height ...