【bzoj2462】[BeiJing2011]矩阵模板
2016-07-23 19:49
288 查看
#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> using namespace std; #define MAXN 100000000 #define prime1 9983543 #define prime2 9804799 #define MOD 99999971 #define N 1010 int m,n,A,B,q; unsigned int hash; unsigned int a ,b ,p1 ,p2 ; bool h[MAXN]; int main() { scanf("%d%d%d%d",&m,&n,&A,&B); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) scanf("%1d",&a[i][j]); for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) a[i][j]+=a[i-1][j]*prime1; for (int i=1;i<=m;i++) for (int j=1;j<=n;j++) a[i][j]+=a[i][j-1]*prime2; p1[0]=1; p2[0]=1; for (int i=1;i<=min(m,n);i++) p1[i]=p1[i-1]*prime1,p2[i]=p2[i-1]*prime2; for (int i=A;i<=m;i++) for (int j=B;j<=n;j++) { hash=a[i][j]; hash-=a[i-A][j]*p1[A]; hash-=a[i][j-B]*p2[B]; hash+=a[i-A][j-B]*p1[A]*p2[B]; hash%=MOD; h[hash]=1; } scanf("%d",&q); while (q--) { for (int i=1;i<=A;i++) for (int j=1;j<=B;j++) scanf("%1d",&b[i][j]); for (int i=1;i<=A;i++) for (int j=1;j<=B;j++) b[i][j]+=b[i-1][j]*prime1; for (int i=1;i<=A;i++) for (int j=1;j<=B;j++) b[i][j]+=b[i][j-1]*prime2; puts(h[b[A][B]%MOD] ? "1" : "0"); } return 0; }
相关文章推荐
- HDU 1863 畅通工程
- cocoapods的安装和使用 总结
- LeetCode[368] Largest Divisible Subset
- CodeForces 427A Police Recruits
- 杭电ACM--HDU-2053a/b+c/d和HDU-2504又见gcd
- poj1611 简单并查集
- 【bzoj4320】ShangHai2006 Homework
- 《计算机图形学》学习笔记 0
- java值传递,引用传递
- phpwind house2.3房产建站笔记
- Bestcoder-Aaronson
- POJ 2975 Nim <Nim 博弈>
- java-基础-异常
- Codeforces Round #364 (Div. 2) B. Cells Not Under Attack 标记数组
- 【bzoj1303】[CQOI2009]中位数图
- 数字图像处理------中值滤波
- POJ 1488
- 【bzoj2282】[Sdoi2011]消防
- Notepad++进行php开发所必需的插件【转】
- UVA - 202 Repeating Decimals