#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的更多相关文章

  1. UVA 11019 Matrix Matcher 矩阵匹配器 AC自动机 二维文本串查找二维模式串

    链接:https://vjudge.net/problem/UVA-11019lrjP218 matrix matcher #include<bits/stdc++.h> using na ...

  2. [Google Guava]字符串处理:连接器、拆分器、字符匹配器

    一.连接器[Joiner] 二.拆分器[Splitter] 三.字符匹配器[CharMatcher] 四.字符集[Charsets] Charsets:针对所有Java平台都要保证支持的六种字符集提供 ...

  3. Junit 断言 assertThat Hamcrest匹配器

    junit断言总结本文参考了http://blog.csdn.net/wangpeng047/article/details/9628449一 junit断言1.JUnit框架用一组assert方法封 ...

  4. EassyMock实践 自定义参数匹配器

    虽然easymock中提供了大量的方法来进行参数匹配,但是对于一些特殊场合比如参数是复杂对象而又不能简单的通过equals()方法来比较,这些现有的参数匹配器就无能为力了.easymock为此提供了I ...

  5. 前端测试框架Jest系列教程 -- Matchers(匹配器)

    写在前面: 匹配器(Matchers)是Jest中非常重要的一个概念,它可以提供很多种方式来让你去验证你所测试的返回值,本文重点介绍几种常用的Matcher,其他的可以通过官网api文档查看. 常用的 ...

  6. Flask入门之自定义过滤器(匹配器)

    1.  动态路由的匹配器? 不知道这种叫啥名,啥用法,暂且叫做匹配器吧. Flask自带的匹配器可以说有四种吧(保守数字,就我学到的) 动态路由本身,可以传任何参数字符串或者数字,如:<user ...

  7. 【Jest】笔记二:Matchers匹配器

    一.前言 什么是匹配器? 我们可以把匹配器看成,testng断言,这么理解就可以了 二.常用的匹配器 test('two plus two is four', () => { expect(2 ...

  8. BF匹配器

    对于BF匹配器,首先我们得用cv2.BFMatcher()创建BF匹配器对象.它取两个可选参数,第一个是normType.它指定要使用的距离量度.默认是cv2.NORM_L2.对于SIFT,SURF很 ...

  9. Rspec: everyday-rspec实操。FactoryBot预构件 (rspec-expectations gem 查看匹配器) 1-4章

    总文档连接: RSpec.info/documentation/ 包括core, expectiation,rails , mock, 点击最新版本,然后右上角搜索class, method. 第3章 ...

随机推荐

  1. 二分查找iOS

    二分查找(也称折半查找)是很常见的一种在数组中查找数据的算法,作为一名程序员是应该必须会的.它的基础思想:获取数组的中间值,将数组分割成两份,利用查找的值跟中间值进行比较,如果查找的值大于中间值,就在 ...

  2. .net面试那些事

    2014-3-30这天从昆明来到了江苏无锡,一周时间,不同地方不同感触. 在经过长达35小时的火车,在上海南见到了我弟,在经过两小时汽车到了无锡.回想起来....在坐汽车途中,虽然自己已很累,但从上海 ...

  3. thinkPHP 表单自动验证功能

    昨天晚上我们老大叫我弄表单自动验证功能,愁了半天借鉴了好多官网的知识,才出来,诶,总之分享一下我自己的成果吧! thinkphp 在Model基类为我们定义了自动验证的函数和正则表达式,我们只需要在对 ...

  4. Swift 与众不同的地方

    Swift 与众不同的地方 switch(元组) 特点 其他语言中的switch语句只能比较离散的整形数据(字符可以转换成整数) 但是swift中可以比较整数.浮点数.字符.字符串.和元组数据类型,而 ...

  5. cloud.cfg_for_centos

    users: - default disable_root: 0 ssh_pwauth: 1 locale_configfile: /etc/sysconfig/i18n mount_default_ ...

  6. 洛谷P1003铺地毯(提高组)

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n. 现在将这些地毯按照编号从小到大的顺序平行于 ...

  7. springboot11 JPA

    一.JPA 1. JPA 介绍 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到 ...

  8. VC调试篇:ASSERT(FALSE)时怎么办?查看调用堆栈

    问题简述 我们在调试程序时,经常会遇到程序中断的情况,就像下图这样. 我艹,这该怎么办,我们一下子就懵逼了.我们选择中断,常常会跳到一个莫名其妙的地方去. 正是这个断言 ASSERT(::IsWind ...

  9. C# 枚举相关操作——解析,遍历

    我们在开发过程中,有时会让枚举作为数据源来绑定一些下拉列表,这时就需要解析枚举名称和值 . 先看一个枚举的定义: /// <summary> /// 数据库类型 /// </summ ...

  10. 运维必须掌握的Linux面试题

    1.解释下什么是GPL,GNU,自由软件? GPL:(通用公共许可证):一种授权,任何人有权取得.修改.重新发布自由软件的权力. GNU:(革奴计划):目标是创建一套完全自由.开放的的操作系统. 自由 ...