原题

在大矩阵里找有几个小矩阵出现过,多组数据


将t个矩阵hash值放入multiset,再把大矩阵中每个hash值从multiset里扔出去,这样最后剩在multiset里的值就是没有找到的小矩阵,答案就是t-size了。

矩阵hash:

a[i][j]为以i,j为右下角的长为p,宽为q的hash值。

先处理横行的hash,然后再把横行的hash值hash,这样就得到了矩阵的hash值。(注意行和列的base要不一样,不然很容易WA)

#include<cstdio>
#include<set>
typedef unsigned long long ll;
#define ba1 1314
#define ba2 100000007
#define T 1010
#define P 55
using namespace std;
ll a[T][T],b[T][T],base1[T],base2[T];
int n,m,t,p,q,cnt;
char ac[T][T],chk[2*P][T][T]; void init()
{
base1[0]=1;
base2[0]=1;
for (int i=1;i<=1000;i++)
{
base1[i]=base1[i-1]*ba1;
base2[i]=base2[i-1]*ba2;
}
} void count(char s[][T],int x,int y)
{
for (int i=1;i<=x;i++)
{
for (int j=1;j<=q;j++)
b[i][j]=(j==1)?s[i][j]:(b[i][j-1]*ba1+s[i][j]);
for (int j=q+1;j<=y;j++)
b[i][j]=b[i][j-1]*ba1+s[i][j]-s[i][j-q]*base1[q];
}
for (int j=q;j<=y;j++)
{
for (int i=1;i<=p;i++)
a[i][j]=(i==1)?b[i][j]:(a[i-1][j]*ba2+b[i][j]);
for (int i=p+1;i<=x;i++)
a[i][j]=a[i-1][j]*ba2+b[i][j]-b[i-p][j]*base2[p];
}
} int solve()
{
multiset<ll> s;
for (int i=1;i<=t;i++)
{
count(chk[i],p,q);
s.insert(a[p][q]);
}
count(ac,n,m);
for (int i=p;i<=n;i++)
for (int j=q;j<=m;j++)
s.erase(a[i][j]);
return t-s.size();
} int main()
{
init();
while (~scanf("%d%d%d%d%d",&n,&m,&t,&p,&q) && n+m+t+p+q)
{
++cnt;
for (int i=1;i<=n;i++) scanf("%s",ac[i]+1);
for (int i=1;i<=t;i++)
for (int j=1;j<=p;j++)
scanf("%s",chk[i][j]+1);
printf("Case %d: %d\n",cnt,solve());
}
return 0;
}

最新文章

  1. monkey之monkey命令详解
  2. HTML中的select只读
  3. Fzu月赛11 老S的旅行计划 dij
  4. mysql导入数据出错
  5. 简谈Java的join()方法
  6. java 如何从配置文件(.properties)中读取内容
  7. poj 1269 计算几何
  8. MongoDB学习总结(五) —— 安全认证
  9. protobuf 编码实现解析(java)
  10. APS期刊投稿准备: REVTex格式
  11. epoll通俗讲解
  12. Cocos2D的OALSimpleAudio预加载音频
  13. vue cookie
  14. vue - 列表显示(列互相影响,全选控制,更新数据)
  15. shell脚本中if的“-e,-d,-f”
  16. 无法创建链接服务器 &quot;ORCL&quot; 的 OLE DB 访问接口 &quot;OraOLEDB.Oracle&quot; 的实例 (错误:7302)
  17. 修改bootstrap-table中的分页样式
  18. Python json使用
  19. CodeReview工具Gerrit的python库pygerrit2
  20. java设计模式(四)代理模式

热门文章

  1. vue的生命周期和路由守卫
  2. JS里访问纯数字ID对象时出现问题
  3. 课时68.id选择器(掌握)
  4. JZOJ 3534. 【NOIP2013提高组day1】货车运输
  5. Windows手工创建服务方法
  6. ASCII码排序 南阳acm4
  7. 裸机——wdt
  8. POJ 2079 最大三角形面积(凸包)
  9. hdoj 1237 模拟
  10. ArrayList &amp; Vector的源码实现