博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【矩阵哈希】【哈希表】bzoj2351 [BeiJing2011]Matrix
阅读量:6980 次
发布时间:2019-06-27

本文共 1533 字,大约阅读时间需要 5 分钟。

引用题解:http://blog.csdn.net/popoqqq/article/details/41084047

#include
#include
using namespace std;typedef unsigned long long ull;int n,m,a,b,q;const ull seed1=17,seed2=19;#define MOD 1000001ull v[MOD],sum[1001][1001],ord[201],pow1[1001],pow2[1001];char s[1001][1001];int first[MOD],next[MOD],en;void Insert(const ull &V){ int U=(int)(V%MOD); v[en]=V; next[en]=first[U]; first[U]=en++;}int main(){ scanf("%d%d%d%d",&n,&m,&a,&b); memset(first,-1,sizeof(first)); ord['0']=1,ord['1']=2; for(int i=1;i<=n;++i) scanf("%s",s[i]+1); for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) sum[i][j]=ord[s[i][j]]+sum[i-1][j]*seed1; for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) sum[i][j]+=sum[i][j-1]*seed2; pow1[0]=pow2[0]=1; for(int i=1;i<=n;i++) pow1[i]=pow1[i-1]*seed1; for(int i=1;i<=m;i++) pow2[i]=pow2[i-1]*seed2; for(int i=a;i<=m;i++) for(int j=b;j<=n;j++) Insert(sum[i][j] -sum[i-a][j]*pow1[a] -sum[i][j-b]*pow2[b] +sum[i-a][j-b]*pow1[a]*pow2[b]); scanf("%d",&q); for(;q;--q) { for(int i=1;i<=a;i++) scanf("%s",s[i]+1); for(int i=1;i<=a;i++) for(int j=1;j<=b;j++) sum[i][j]=ord[s[i][j]]+sum[i-1][j]*seed1; for(int i=1;i<=a;i++) for(int j=1;j<=b;j++) sum[i][j]+=sum[i][j-1]*seed2; int o=(int)(sum[a][b]%MOD); for(int i=first[o];i!=-1;i=next[i]) if(v[i]==sum[a][b]) {puts("1"); goto OUT;} puts("0"); OUT:; } return 0;}

转载于:https://www.cnblogs.com/autsky-jadek/p/4245589.html

你可能感兴趣的文章
phpstudy多站点配置好后index of/ 列表无法出现的解决
查看>>
70.打印所有Spring boot载入的bean【从零开始学Spring Boot】
查看>>
jvm compile
查看>>
linux内核SMP负载均衡浅析
查看>>
display的block、none、inline属性及解释
查看>>
新的Mac下如何配置开发者账号信息
查看>>
非阻塞socket的连接
查看>>
UITextField的代理方法
查看>>
无人驾驶相关数据集
查看>>
C 的大致运行原理。
查看>>
关于jsp和eclipse服务器端的相关配置和JS的区别
查看>>
JavaScript - 数据类型和变量
查看>>
TCP/IP:IP选项处理
查看>>
【网摘】检测 iframe 是否加载完成
查看>>
cocos2dx 3.x(动态改变精灵的背景图片)
查看>>
cocos2d-x JS 获取当前系统时间(解决屏幕双击点击事件)
查看>>
支付宝接入参考博客
查看>>
学习Spring中遇到关于BeanFactory及测试类的问题
查看>>
现实迷途 第七章 特殊客户
查看>>
找水王
查看>>