Code:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<queue>
  6. using namespace std;
  7. const int maxn=103;
  8. const int maxd=1005;
  9. const int maxc=maxd*10;
  10. const int sigma=28;
  11. char A[maxd][maxd],B[maxn];
  12. int ans[maxd][maxd];
  13. int N,M,X,Y;
  14. # define pb push_back
  15. struct AC{
  16. int ch[maxc][50],f[maxc];
  17. vector<int>G[maxc];
  18. queue<int>Q;
  19. int cnt=0;
  20. int idx(char t){return t-'a';}
  21. void init(){
  22. memset(ch,0,sizeof(ch));
  23. memset(f,0,sizeof(f));
  24. memset(ans,0,sizeof(ans));
  25. for(int i=0;i<maxc;++i)G[i].clear();
  26. cnt=0;
  27. }
  28. void insert(char T[],int u){
  29. int n=strlen(T);
  30. int j=0;
  31. for(int i=0;i<n;++i){
  32. int a=idx(T[i]);
  33. if(!ch[j][a])ch[j][a]=++cnt;
  34. j=ch[j][a];
  35. }
  36. G[j].pb(u);
  37. }
  38. void getfail(){
  39. for(int i=0;i<=sigma;++i)if(ch[0][i]){Q.push(ch[0][i]);}
  40. while(!Q.empty()){
  41. int r=Q.front();Q.pop();
  42. for(int i=0;i<=sigma;++i){
  43. int u=ch[r][i];
  44. if(!u){ch[r][i]=ch[f[r]][i];continue;}
  45. Q.push(u);
  46. int v=f[r];
  47. f[u]=ch[v][i];
  48. }
  49. }
  50. }
  51. void operate()
  52. {
  53. for(int i=0;i<N;++i)
  54. {
  55. int p=0;
  56. for(int j=0;j<M;++j){
  57. int c=idx(A[i][j]);
  58. p=ch[p][c];
  59. int sz=G[p].size();
  60. if(sz>0)
  61. {
  62. for(int g=0;g<sz;++g)
  63. {
  64. int h=G[p][g];
  65. if(h<=i)ans[i-h][j-Y+1]+=1;
  66. }
  67. }
  68. }
  69. }
  70. }
  71. }op;
  72. int main(){
  73. int T;scanf("%d",&T);
  74. while(T--){
  75. op.init();
  76. scanf("%d%d",&N,&M);
  77. for(int i=0;i<N;++i)scanf("%s",A[i]);
  78. scanf("%d%d",&X,&Y);
  79. for(int i=0;i<X;++i){scanf("%s",B);op.insert(B,i);}
  80. op.getfail();
  81. op.operate();
  82. int fin=0;
  83. for(int i=0;i<N;++i)
  84. for(int j=0;j<M;++j)
  85. if(ans[i][j]==X)++fin;
  86. printf("%d\n",fin);
  87. }
  88. return 0;
  89. }

  

Matrix Matcher UVA - 11019AC_自动机 + 代价提前计算的更多相关文章

  1. [bzoj2726][SDOI2012]任务安排 ——斜率优化,动态规划,二分,代价提前计算

    题解 本题的状态很容易设计: f[i] 为到第i个物件的最小代价. 但是方程不容易设计,因为有"后效性" 有两种方法解决: 1)倒过来设计动态规划,典型的,可以设计这样的方程: d ...

  2. UVA 11019 Matrix Matcher(ac自动机)

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. UVA11019 Matrix Matcher (AC自动机)

    二维的矩阵匹配,把模式矩阵按列拆开构造AC自动机,记录行号(为了缩点判断). 把T矩阵按行匹配,一旦匹配成功,在假想的子矩阵左上角位置加一.最后统计总数. 因为所有模式串长度一样,不用维护last数组 ...

  4. 洛谷 P2365 任务安排_代价提前计算 + 好题

    最开始,笔者将状态 fif_{i}fi​ 定义为1到i的最小花费 ,我们不难得到这样的一个状态转移方程,即 fi=(sumti−sumtj+S+Costj)∗(sumfi−sumfj)f_{i}=(s ...

  5. UVA - 1625 Color Length[序列DP 提前计算代价]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

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

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

  7. BZOJ 2726: [SDOI2012]任务安排 [斜率优化DP 二分 提前计算代价]

    2726: [SDOI2012]任务安排 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 868  Solved: 236[Submit][Status ...

  8. 费用提前计算相关的DP(BZOJ2037,POJ3042,ZOJ3469)

    在刷ZeroClock大神的区间DP专辑,遇见了ZOJ3469,完全不无从下手,然后有人说是论问题,推荐看徐源盛<对一类动态规划问题的研究>这篇论文,果断得膜拜了下,感觉好神奇,可以把未来 ...

  9. UVa 11019 (AC自动机 二维模式串匹配) Matrix Matcher

    就向书上说得那样,如果模式串P的第i行出现在文本串T的第r行第c列,则cnt[r-i][c]++; 还有个很棘手的问题就是模式串中可能会有相同的串,所以用repr[i]来记录第i个模式串P[i]第一次 ...

随机推荐

  1. Java上使用Lombok插件简化Getter、Setter方法

    Maven引入依赖: <dependencies> <dependency> <groupId>org.projectlombok</groupId> ...

  2. msyql null 引起的错误

    mysql 默认值不要为null,最好为空 否则,当你查询的时候,会引起一些异常 比如 select  * from a where b!='new' 假设有一条数据b=null,你是查询不出来的 解 ...

  3. Java中Void占位符的測试及个人理解

    Java对Void类的说明是:Void 类是一个不可实例化的占位符类,它保持一个对代表 Java keyword void 的 Class 对象的引用. 代表的是: 代表主要的 Java 类型 voi ...

  4. php简单的连接数据库

    <?php $conn=@mysql_connect("localhost","root","") or die ("no& ...

  5. hdoj 1518 Square 【dfs】

    题意:给出n个(不同长度的)棍子,问能不能将他们构成一个正方形. 策略:深搜. hdoj 1455的简化版 代码: #include <stdio.h> #include <stri ...

  6. springAOP注解方式实现日志操作

    通过自定义注解调用方法执行日志存储: package com.zktx.platform.log2; import java.lang.reflect.Method; import java.util ...

  7. h5-8 canvas

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. linux logo的格式【转】

    本文转载自:http://blog.csdn.net/xiayu98020214/article/details/7394100 =================================== ...

  9. 写一个类似淘宝的ios app需要用到哪些技术?

    写一个类似淘宝的ios app需要用到哪些技术? 让我想起了有人私信我,说不缺钱,做个类似知乎的东西,包括加运营,需要多少钱. 扯淡结束,正好最近看了一点这方面的东西,也许对题主来说有点帮助. 手机淘 ...

  10. javascript设计模式-继承

    javascript继承分为两种:类式继承(原型链.extend函数).原型式继承(对继承而来的成员的读和写的不对等性.clone函数). 类式继承-->prototype继承: functio ...