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章 ...
随机推荐
- shuffle的过程分析
shuffle的过程分析 shuffle阶段其实就是之前<MapReduce的原理及执行过程>中的步骤2.1.多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点 ...
- 超轻量级异步JS框架,别再让嵌套影响我们的优雅代码!
1.异步JS的重要性 随着Web平台地位的提升,霸占着浏览器的JavaScript语言也成为了世界上最流行的语言之一,甚至通过Node.js进入了服务器编程领域.JavaScript的一个重要特性便是 ...
- 剑指Offer - 九度1510 - 替换空格
剑指Offer - 九度1510 - 替换空格2013-11-29 20:53 题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之 ...
- 剑指Offer - 九度1362 - 左旋转字符串(Move!Move!!Move!!!)
剑指Offer - 九度1362 - 左旋转字符串(Move!Move!!Move!!!)2013-11-23 03:05 题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任 ...
- 自动化测试学习之路--json、dom编程
1.json: json是JavaScript Object Notation,是一种数据传输格式. 以下程序都是在浏览器的Console下执行的. 创建一个javaScript的对象: var st ...
- 【Python】python内置函数、列表生成式、生成器
一.内置函数 1 print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 2 print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真 3 pri ...
- JS——BOM、DOM
BOM.DOM BOM window对象 history对象 location对象 screen对象 DOM DOM对HTML元素访问操作 HTML DOM树 DOM 节点 DOM访问HTML元素 D ...
- Oracle数据库存量数据抽取使用spool控制命令
spool是oracle sqlplus提供的一个控制命令.可以利用spool和select语句的组合动态生成一些失去了脚本或者一些数据. 1.spool作用: 在sqlplus中用来保存或打印查询 ...
- go语言的学习网站
1)http://www.runoob.com/go/go-data-types.html 2)https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/ ...
- 网络--OSI七层模型详解
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...