知识点:二分,前缀和,哈希

难度:5

这个题一开始没有用二分,写了二分之后这个题就过了,由于才刚刚入门算法竞赛,知识储备比较有限,只能用我会的知识来写这道题,首先看这个题显然有单调性,可以使用二分,把求解转化为判定问题,然后就是我们哈希一个正方形的矩阵,用什么呢,想到了用这个正方形的数的和取模来作为哈希值,然后就是哈希函数里面比较,这里需要注意的一点是,我们第一个矩阵哈希的时候需要插入值,但是第二个矩阵用到哈希函数的话只需要它判重,不需要它向散列表里面插入什么,所以函数里面又额外加了一个变量,就变成了现在的这个写法,

最后一个点,我估计是新加的hack数据,题解里面不少的暴力做法都过不了最后一个点,我这个vector写法的用了300ms,还凑合。。

这个题一开始没有用二分就是想着数据范围这么小,用不到二分了把,但是结果确是我用了二分才过的,二分把效率提升了几倍把,所以就是不要小看这几倍的效率,以后能用二分的地方就试试二分,多写写才能对这些知识点的用法,时间复杂度有更熟练的掌握,

#include <bits/stdc++.h>using namespace std;const int N = 55;
const int Mod = 10007;int n;
long long a[N][N], b[N][N], c[N][N], d[N][N];
vector<pair<int, int>> v[Mod + 5];
bool flag;void solve(int x, int y, int len, long long e[][N], long long f[][N], int jug) {int x2 = x + len - 1, y2 = y + len - 1;long long sum = f[x2][y2] - f[x2][y - 1] - f[x - 1][y2] + f[x - 1][y - 1];for (int k = 0; k < (int) v[sum % Mod].size(); k++) {pair<int, int> now = v[sum % Mod][k];int ok = 1;for (int i = 0; i < len && ok; i++) {for (int j = 0; j < len && ok; j++) {if (a[now.first + i][now.second + j] != e[x + i][y + j]) ok = 0;}}if (ok) { flag = true; return; }}if (jug) v[sum % Mod].push_back(make_pair(x, y));
}bool check(int len) {for (int i = 0; i < Mod; i++) v[i].clear();for (int i = 1; i <= n - len + 1; i++) {for (int j = 1; j <= n - len + 1; j++) {solve(i, j, len, a, c, 1);}}for (int i = 1; i <= n - len + 1; i++) {for (int j = 1; j <= n - len + 1; j++) {flag = false;solve(i, j, len, b, d, 0);if (flag) return true;}}return false;
}int main() {cin >> n;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {cin >> a[i][j];c[i][j] = a[i][j] + c[i - 1][j] + c[i][j - 1] - c[i - 1][j - 1];}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {cin >> b[i][j];d[i][j] = b[i][j] + d[i - 1][j] + d[i][j - 1] - d[i - 1][j - 1];}}int l = 0, r = n;while (l < r) {int mid = (l + r + 1) >> 1;if (check(mid)) l = mid;else r = mid - 1;}cout << l;return 0;
}

P4398 [JSOI2008]Blue Mary的战役地图相关推荐

  1. Luogu P4398 [JSOI2008]Blue Mary的战役地图

    题目链接:传送门 二维哈希 枚举边长和两个正方形的两个端点 复杂度不满 n 5 n^5 n5 好吧差不多刚好卡过去 #include <iostream> #include <cst ...

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

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

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

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

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

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

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

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

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

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

  7. [JSOI2008]Blue Mary的战役地图 Hash题解

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

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

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

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

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

最新文章

  1. MongoDB 3.0 导入命令
  2. Android自定义ViewGroup的OnMeasure和onLayout详解
  3. sitecore系统教程之架构概述
  4. 2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...
  5. .NET Core 3.0愈加成熟,微软将不再把.NET Framework API移植给它
  6. linux中ps ef和aux,Linux中ps aux、ps -aux、ps -ef之间的区别讲解
  7. html快照抓取,完整网页快照抓取
  8. 158 行 Python 代码,复现 DeepMind 递归神经网络 DRAW!
  9. python创建员工_python作业员工信息表程序(第四周)
  10. iOS开发之Xcode常见错误
  11. Java——泛型(最易懂的方式讲解泛型)
  12. OSPF配置命令及外部选路
  13. iOS开发直播app-美颜滤镜GPUImageBeautifyFilter
  14. 服务器搬迁方案_机房搬迁方案(样例)
  15. 2021年中国大企业创新百强排行榜:华为位居榜首,北京上榜企业最多(附年榜TOP100详单)
  16. 互联网日报 | 6月8日 星期二 | 华为30亿成立数字能源公司;阿里明星直播业务“天猫星选”上线;苹果WWDC 2021开幕...
  17. Windows 共享无线上网 无法启动ICS服务解决方法(WIN7 ICS服务启动后停止)
  18. 【墨尘】变态心理学(北京大学)
  19. linux中nginx卸载命令,linux服务器nginx的卸载与安装教程
  20. 多人连线的枪战游戏-补充

热门文章

  1. 基于arduinosim808onenet的老年人健康守护系统(二)
  2. 使用EasyAR实现WebAR案例
  3. 成为中国绅士的障碍—自私
  4. Vue + 项目优化 通过externals加载外部CDN资源
  5. 小程序的上拉加载功能
  6. 名悦集团教你汽车商业保险怎么买划算
  7. python创意爱情代码-13种编程语言的命名创意,非常有趣!
  8. C++中必须用初始化列表的四种情况
  9. 工具及方法 - 安装播放器pot player
  10. Moravec,Forstner和Harris特征点提取opencv实现