
YbtOJ hash和hash表课堂过关 例5 子正方形【hash】【二分】
发布日期:2021-05-07 13:10:06
浏览次数:17
分类:原创文章
本文共 1917 字,大约阅读时间需要 6 分钟。
思路
这道题我没有经过太多思考,直接就写了 O ( n 4 log 2 n ) O(n^4 \log_2n) O(n4log2n) 的代码,
思路就是首先把两个矩阵的所有正方形hash一次,然后再暴力去枚举两个正方形随意两个右下角的点,
然后二分求最大边长看看hash值是否相等就好了。
代码
#include<algorithm>#include<iostream>#include<cstdio>#include<cmath>using namespace std;unsigned long long hasha[101][101],hashb[101][101];unsigned long long f1[100010],f2[100010];int n,ans;void ycl(){ f1[0]=1ull,f2[0]=1ull; for(int i=1; i<=n; i++) f1[i]=f1[i-1]*1000000007ull; for(int i=1; i<=n; i++) f2[i]=f2[i-1]*1000000009ull; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) hasha[i][j]+=hasha[i][j-1]*1000000007ull; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) hasha[i][j]+=hasha[i-1][j]*1000000009ull; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) hashb[i][j]+=hashb[i][j-1]*1000000007ull; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) hashb[i][j]+=hashb[i-1][j]*1000000009ull;}bool check(int i,int j,int k,int w,int mid){ if(i-mid<0||j-mid<0||w-mid<0||k-mid<0) return 0; unsigned long long jsa=hasha[i][j]-hasha[i-mid][j]*f2[mid]-hasha[i][j-mid]*f1[mid]+hasha[i-mid][j-mid]*f1[mid]*f2[mid]; unsigned long long jsb=hashb[k][w]-hashb[k-mid][w]*f2[mid]-hashb[k][w-mid]*f1[mid]+hashb[k-mid][w-mid]*f1[mid]*f2[mid];// if(i==3&&j==3&&k==2&&w==2&&mid==2)// cout<<jsa<<" "<<jsb; if(jsb==jsa) return 1; else return 0;}int main(){ cin>>n; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) scanf("%d",&hasha[i][j]); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) scanf("%d",&hashb[i][j]); ycl(); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) for(int k=1; k<=n; k++) for(int w=1; w<=n; w++) { int l=0,r=n,mid=0; while(l<=r) { mid=(l+r)>>1; if(check(i,j,k,w,mid)) { l=mid+1,ans=max(ans,mid); } else r=mid-1; } } cout<<ans; return 0;}
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月11日 23时35分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
第一场
2019-03-04
蓝桥杯备战——刷题(2019)
2019-03-04
ArcMap|栅格计算器报错
2019-03-04
《小石潭记》古文鉴赏
2019-03-04
Matlab中有关字符串数组的常见问题解答
2019-03-04
未定义的变量“py”或函数“py.command”
2019-03-04
我们,都一样......(句句入心)
2019-03-04
总结了一下c/c++函数和变量的命名规则
2019-03-04
关于构造函数内调用虚函数的问题
2019-03-04
最短路径问题—Dijkstra算法
2019-03-04
求二叉树的深度
2019-03-04
录音功能
2019-03-04
mysql时间相关函数和操作
2019-03-04
万物皆可爬系列查看翻页翻到最后是什么
2019-03-04
python scrapy
2019-03-04
pymongo的使用
2019-03-04
A Guide to Node.js Logging
2019-03-04
前端基础知识学习FreeCodeCamp
2019-03-04
css的一些基础知识
2019-03-04