BZOJ1567 [JSOI2008]Blue Mary的战役地图 二分答案 哈希
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ1567
题意概括
给出两个n*n的数字矩阵,问最大公共正方形边长。
题解
先二分答案一个m,对于每一个m,哈希大矩阵中每一个位置上的边长为m的正方形,然后排序,lower_bound一下判定即可。
鬼畜的是,我的代码在BZOJ上面过去了,but和hzwer大佬(Orz)的代码对拍没有过去,不知道怎么回事……
代码
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long LL;
const int N=50+5;
LL n,a[N][N],b[N][N],a1[N][N],a2[N][N],b1[N][N],b2[N][N],A[N*N],B[N*N];
bool check(LL m){
LL mod=2333333333LL,p=1000000007LL,pm=1;
for (int i=1;i<=m;i++)
pm=pm*p%mod;
memset(a1,0,sizeof a1);
memset(a2,0,sizeof a2);
memset(b1,0,sizeof b1);
memset(b2,0,sizeof b2);
memset(A,0,sizeof A);
memset(B,0,sizeof B);
for (int i=1;i<=n;i++)
for (int j=1;j+m-1<=n;j++)
for (int k=1;k<=m;k++)
a1[i][j]=(a1[i][j]*p+a[i][j+k-1])%mod;
for (int i=1;i+m-1<=n;i++)
for (int j=1;j+m-1<=n;j++)
for (int k=1;k<=m;k++)
a2[i][j]=(a2[i][j]*pm+a1[i+k-1][j])%mod;
for (int i=1;i<=n;i++)
for (int j=1;j+m-1<=n;j++)
for (int k=1;k<=m;k++)
b1[i][j]=(b1[i][j]*p+b[i][j+k-1])%mod;
for (int i=1;i+m-1<=n;i++)
for (int j=1;j+m-1<=n;j++)
for (int k=1;k<=m;k++)
b2[i][j]=(b2[i][j]*pm+b1[i+k-1][j])%mod;
int tot=0;
for (int i=1;i+m-1<=n;i++)
for (int j=1;j+m-1<=n;j++)
A[++tot]=a2[i][j],B[tot]=b2[i][j];
sort(A+1,A+tot+1);
sort(B+1,B+tot+1);
for (int i=1;i<=tot;i++)
if (A[lower_bound(A+1,A+tot+1,B[i])-A]==B[i])
return 1;
return 0;
}
int main(){
scanf("%lld",&n);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
scanf("%lld",&a[i][j]),a[i][j]+=1LL<<31;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
scanf("%lld",&b[i][j]),b[i][j]+=1LL<<31;
LL le=1,ri=n,mid,ans=0;
while (le<=ri){
mid=(le+ri)>>1;
if (check(mid))
le=mid+1,ans=mid;
else
ri=mid-1;
}
printf("%lld",ans);
return 0;
}
BZOJ1567 [JSOI2008]Blue Mary的战役地图 二分答案 哈希的更多相关文章
- BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )
二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...
- B1567 [JSOI2008]Blue Mary的战役地图 二分答案+hash
一开始以为是dp,后来看了一下标签...二分答案?之前也想过,但是没往下想,然后之后的算法就顺理成章,先求出第一个地图的所有子矩阵的hash值,然后求第二个,在上一个地图例二分查找,然后就没了. 算法 ...
- bzoj1567: [JSOI2008]Blue Mary的战役地图
将矩阵hash.s[0]忘了弄成0,输出中间过程发现了. hash.sort.判重.大概这样子的步骤吧. #include<cstdio> #include<cstring> ...
- 【矩阵哈希】【二分答案】【哈希表】bzoj1567 [JSOI2008]Blue Mary的战役地图
引用题解:http://hzwer.com/5153.html 当然,二分可以换成哈希表. #include<cstdio> #include<iostream> #inclu ...
- BZOJ1567 [JSOI2008]Blue Mary的战役地图(二分+二维hash)
题意 问边长为n的两个正方形中最大的相等子正方形.(n<=50) 题解 用到了二维hash,感觉和一维的不太一样. 对于列行有两个不同的进制数然后也是通过类似前缀和的方法差分出一个矩形的hash ...
- BZOJ 1567: [JSOI2008]Blue Mary的战役地图
1567: [JSOI2008]Blue Mary的战役地图 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1011 Solved: 578[Sub ...
- BZOJ 1567: [JSOI2008]Blue Mary的战役地图 矩阵二维hash
1567: [JSOI2008]Blue Mary的战役地图 Description Blue Mary最近迷上了玩Starcraft(星际争霸) 的RPG游戏.她正在设法寻找更多的战役地图以进一步提 ...
- [JSOI2008]Blue Mary的战役地图(二分+哈希)
Blue Mary最近迷上了玩Starcraft(星际争霸) 的RPG游戏.她正在设法寻找更多的战役地图以进一步提高自己的水平. 由于Blue Mary的技术已经达到了一定的高度,因此,对于用同一种打 ...
- bzoj 1567: [JSOI2008]Blue Mary的战役地图【二分+hash】
二维哈希+二分 说是二维,其实就是先把列hash了,然后再用列的hash值hash行,这样可以O(n)的计算一个正方形的hash值,然后二分边长,枚举左上角点的坐标然后hash判断即可 只要base选 ...
随机推荐
- oracle数据库还原以及备份 包括快速备份(并发压缩)
expdp jhpt/XXXX directory=databackup dumpfile=dpfile_201512091300_%U.dmp filesize=5G parallel=8 comp ...
- 初识java和C的不同
学习java语言,发现C语言的语法尽管很类似,但是java的代码编写与C语言却大不相同. 一,java的类,首先接触到的是类这个思想,类中可以定义属性,可以用方法来对属性进行相应的操作: 二,jav ...
- cetus系列~ cetus+mha
一 简介:mha+cetus高可用架构二 环境 1 mysql 5.7 并行复制+GTID 2 cetus最新版 3 mha0.57二 安装 1 安装mha-rpm包 2 做免密认证 3 ...
- EB-GAN系(Energy-based GAN)
学习总结于国立台湾大学 :李宏毅老师 EB-GAN: Energy-based Generative Adversarial Network MA-GAN:MAGAN: Margin Adaptati ...
- High level GPU programming in C++
https://github.com/prem30488/C2CUDATranslator http://www.training.prace-ri.eu/uploads/tx_pracetmo/GP ...
- ruia笔记
ruia笔记 loop = loop or asyncio.new_event_loop() get_event_loop()方法仅在同样的线程中生效,如果在一个新线程中,应该用new_event_l ...
- springboot系列二、springboot项目搭建
一.官网快速构建 1.maven构建项目 1.访问http://start.spring.io/ 2.选择构建工具Maven Project.Spring Boot版本2.1.1以及一些工程基本信息, ...
- Advanced Installer 14.9 – WPF或winform应用程序打包成exe文件
Advanced Installer14.9 下载地址:https://pan.baidu.com/s/1uj2QcxWcpGdqsjAinNPIAw 提取码:sa3r 选择Visual Studi ...
- mongodb数据库集群及sharding分片配置
复制集群的配置 1.安装mongodb数据库 在主节点和从节点上都安装mongodb # rpm -ivh mongo-10gen-2.4.6-mongodb_1.x86_64.rpm mongo-1 ...
- HTTP基础知识3
HTTP之URL HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接.URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息 ...