题目描述

传送门

题解

二分答案之后 O(n2) O(n^2)矩阵hash
就是个裸题

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
using namespace std;
#define UL unsigned long long
#define N 55const UL s=23333333333LL;
const UL S=3115439631056497LL;
int n,ans,a[N][N],b[N][N];
UL mis[N],miS[N],c[N][N],d[N][N];
map <UL,bool> hash;bool check(int mid)
{for (int i=1;i<=n;++i){c[i][1]=(UL)a[i][1];for (int j=2;j<=mid;++j)c[i][1]=c[i][1]*s+(UL)a[i][j];for (int j=2;j<=n-mid+1;++j)c[i][j]=(c[i][j-1]-(UL)a[i][j-1]*mis[mid-1])*s+(UL)a[i][j+mid-1];}for (int i=1;i<=n-mid+1;++i){d[1][i]=c[1][i];for (int j=2;j<=mid;++j)d[1][i]=d[1][i]*S+c[j][i];for (int j=2;j<=n-mid+1;++j)d[j][i]=(d[j-1][i]-c[j-1][i]*miS[mid-1])*S+c[j+mid-1][i];}hash.clear();for (int i=1;i<=n-mid+1;++i)for (int j=1;j<=n-mid+1;++j)hash[d[i][j]]=1;for (int i=1;i<=n;++i){c[i][1]=(UL)b[i][1];for (int j=2;j<=mid;++j)c[i][1]=c[i][1]*s+(UL)b[i][j];for (int j=2;j<=n-mid+1;++j)c[i][j]=(c[i][j-1]-(UL)b[i][j-1]*mis[mid-1])*s+(UL)b[i][j+mid-1];}for (int i=1;i<=n-mid+1;++i){d[1][i]=c[1][i];for (int j=2;j<=mid;++j)d[1][i]=d[1][i]*S+c[j][i];for (int j=2;j<=n-mid+1;++j)d[j][i]=(d[j-1][i]-c[j-1][i]*miS[mid-1])*S+c[j+mid-1][i];}for (int i=1;i<=n-mid+1;++i)for (int j=1;j<=n-mid+1;++j)if (hash[d[i][j]]) return 1;return 0;
}
int find()
{int l=1,r=n,mid,ans=0;while (l<=r){mid=(l+r)>>1;if (check(mid)) ans=mid,l=mid+1;else r=mid-1;}return ans;
}
int main()
{scanf("%d",&n);mis[0]=1LL;for (int i=1;i<=n;++i) mis[i]=mis[i-1]*s;miS[0]=1LL;for (int i=1;i<=n;++i) miS[i]=miS[i-1]*S;for (int i=1;i<=n;++i)for (int j=1;j<=n;++j)scanf("%d",&a[i][j]);for (int i=1;i<=n;++i)for (int j=1;j<=n;++j)scanf("%d",&b[i][j]);ans=find();printf("%d\n",ans);
}

[BZOJ1567][JSOI2008]Blue Mary的战役地图(二分+矩阵hash)相关推荐

  1. BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )

    二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...

  2. B1567 [JSOI2008]Blue Mary的战役地图 二分答案+hash

    一开始以为是dp,后来看了一下标签...二分答案?之前也想过,但是没往下想,然后之后的算法就顺理成章,先求出第一个地图的所有子矩阵的hash值,然后求第二个,在上一个地图例二分查找,然后就没了. 算法 ...

  3. BZOJ1567 [JSOI2008]Blue Mary的战役地图(二分+二维hash)

    题意 问边长为n的两个正方形中最大的相等子正方形.(n<=50) 题解 用到了二维hash,感觉和一维的不太一样. 对于列行有两个不同的进制数然后也是通过类似前缀和的方法差分出一个矩形的hash ...

  4. bzoj1567: [JSOI2008]Blue Mary的战役地图

    传送门 二分答案+哈希. 二分边长,哈希判断是否相等. 注意,行/列上计算key时乘的数应不同. #include<cstring> #include<cmath> #incl ...

  5. BZOJ1567 [JSOI2008]Blue Mary的战役地图

    枚举答案然后hash判断即可 矩阵就把每一行接一起hash就行了 我用了双模双base,单模单base被卡了 #include<iostream> #include<cstring& ...

  6. bzoj 1567: [JSOI2008]Blue Mary的战役地图 二维哈希

    1567: [JSOI2008]Blue Mary的战役地图 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1199  Solved: 702 [S ...

  7. BZOJ 1567: [JSOI2008]Blue Mary的战役地图

    二次联通门 : BZOJ 1567: [JSOI2008]Blue Mary的战役地图 /*BZOJ 1567: [JSOI2008]Blue Mary的战役地图社会我栋哥人怂P话多暴力能A题正解能W ...

  8. BZOJ 1567: [JSOI2008]Blue Mary的战役地图 矩阵二维hash

    1567: [JSOI2008]Blue Mary的战役地图 Description Blue Mary最近迷上了玩Starcraft(星际争霸) 的RPG游戏.她正在设法寻找更多的战役地图以进一步提 ...

  9. [JSOI2008]Blue Mary的战役地图(二分+哈希)

    Blue Mary最近迷上了玩Starcraft(星际争霸) 的RPG游戏.她正在设法寻找更多的战役地图以进一步提高自己的水平. 由于Blue Mary的技术已经达到了一定的高度,因此,对于用同一种打 ...

最新文章

  1. 城市智能化发展中,AI公司应该做什么?
  2. Exadata X2-2 vs EMC Greenplum DCA vs Netezza TwinFin 12主要配置大对比
  3. 计算硼原子的基态能级B---库仑排斥能
  4. Python基础教程(十一):多线程、XML解析
  5. mysql查询字符串出现次数
  6. 设计模式(创建型)之原型模式
  7. Vue自定义插件方法大全
  8. 数组中元素的动态增加和删除
  9. 【Baby Maniacs】mmd动作+镜头下载
  10. 身为码农,为12306说两句公道话:
  11. 仿知乎的问答社区PHP系统+支持响应式/打赏功能
  12. 【深入理解C++】头文件防卫式声明
  13. Excel整行数据自动标颜色
  14. VS2017、2019驱动WDF开发环境找不到头文件#include <ntddk.h>
  15. Elang 学习笔记(二)
  16. Altium Designer 入门
  17. 论文阅读:Convolutional Neural Networks for Sentence Classification 卷积神经网络的句子分类
  18. 程序员给女朋友庆祝节日的方式
  19. can和could的用法_情态动词can与could的用法
  20. WOL远程开机,实际落地成功。

热门文章

  1. 蚂蜂窝上线酒店预订 商业化进展步骤之一
  2. BCS2022冬奥网络安全“零事故”宣传周:奇安信首次披露“中国架构”
  3. Python-并发编程(进程)
  4. unity实现武器绕着人物旋转
  5. 183 wnmp环境搭建和laravel
  6. 如何用android studio测试用例,使用Android studio进行Android单元测试
  7. 亚马逊AmazonS3存储概念
  8. python+Appium 实现app自动化测试详细讲解
  9. 【Lua基础系列】rawset rawget方法
  10. sinee303a变频器说明书_sinee em303a变频器用户手册新.pdf