BZOJ1057 [ZJOI2007]棋盘制作 【最大同色矩形】
1057: [ZJOI2007]棋盘制作
Time Limit: 20 Sec Memory Limit: 162 MB
Submit: 3248 Solved: 1636
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 0 1
0 1 0
1 0 0
Sample Output
6
HINT
N, M ≤ 2000
好像以前写过?
再写一遍加深印象
开一个sum[i][j]表示位置(i,j)能向右同色延伸的最大长度
我们先定下矩形的左边所在列,对该列中的点按向右延伸长度降序排序,然后枚举每个点
这样子每次枚举出的点对应的宽一定是当前最小的【宽】,再用并查集维护其向上向下最长延伸距离【长】,
我们就可以得出以该点为向右为宽的最大矩形面积
而我们最后求出的矩形的宽一定会受其中至少一个点向右延伸长度的束缚
当我们枚举到答案中影响宽的那一个点的时候就一定能更新出最优答案
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = head[u]; k != -1; k = edge[k].next)
using namespace std;
const int maxn = 2005,maxm = 100005,INF = 1000000000;
inline int RD(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57) {out = (out << 1) + (out << 3) + c - '0'; c = getchar();}return out * flag;
}
int A[maxn][maxn],sum[maxn][maxn],N,M,up[maxn],down[maxn],ans1 = 0,ans2 = 0;
bool vis[maxn];
struct node{int i,len;}e[maxn];
inline bool operator < (const node& a,const node& b){return a.len > b.len;}
inline int findu(int u){return u == up[u] ? u : up[u] = findu(up[u]);}
inline int findd(int u){return u == down[u] ? u : down[u] = findd(down[u]);}
void solve(){for (int i = 1; i <= N; i++){sum[i][M] = 1;for (int j = M - 1; j > 0; j--)sum[i][j] = A[i][j] == A[i][j + 1] ? sum[i][j + 1] + 1 : 1;}for (int j = 1; j <= M; j++){for (int i = 1; i <= N; i++){e[i].i = i; e[i].len = sum[i][j]; down[i] = up[i] = i; vis[i] = false;}sort(e + 1,e + 1 + N);for (int i = 1; i <= N; i++){int k = e[i].i; vis[k] = true;//printf("(%d,%d) len = %d %d\n",k,j,e[i].len,ans1);if (k > 1 && vis[k - 1] && A[k - 1][j] == A[k][j]){up[k] = findu(k - 1);down[k - 1] = k;}if (k < N && vis[k + 1] && A[k + 1][j] == A[k][j]){down[k] = findd(k + 1);up[k + 1] = k;}int u = findu(k),d = findd(k),ed = min(e[i].len,d - u + 1);//printf("%d %d\n",u,d);ans1 = max(ans1,ed * ed);ans2 = max(ans2,e[i].len * (d - u + 1));}}
}
int main(){N = RD(); M = RD();REP(i,N) REP(j,M) A[i][j] = RD() ^ ((i & 1) ^ (j & 1));//REP(i,N){REP(j,M) cout<<A[i][j]<<' ';cout<<endl;}solve();cout<<ans1<<endl<<ans2<<endl;return 0;
}
转载于:https://www.cnblogs.com/Mychael/p/8282779.html
BZOJ1057 [ZJOI2007]棋盘制作 【最大同色矩形】相关推荐
- BZOJ-1057: [ZJOI2007]棋盘制作(单调栈)
1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 3096 Solved: 1567 [Submit][St ...
- 【单调栈 动态规划】bzoj1057: [ZJOI2007]棋盘制作
好像还有个名字叫做"极大化"? Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8 ...
- BZOJ1057: [ZJOI2007]棋盘制作
Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应 ...
- Bzoj1057 [ZJOI2007]棋盘制作
Time Limit: 20 Sec Memory Limit: 162 MB Submit: 2464 Solved: 1219 Description 国际象棋是世界上最古老的博弈游戏之一,和 ...
- 【题解】[ZJOI2007]棋盘制作
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个 8 × 8 8 \times 8 8×8 大小的黑白相间的方阵,对应 ...
- 洛谷 P1169 [ZJOI2007]棋盘制作
题目链接 P1169 [ZJOI2007]棋盘制作 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8×8大小的黑白相 ...
- 洛谷 P4147 玉蟾宫 P1169 [ZJOI2007]棋盘制作(求最大子矩阵)
题目: P4147 玉蟾宫: https://www.luogu.org/problemnew/show/P4147 P1169 [ZJOI2007]棋盘制作: https://www.luogu. ...
- 【洛谷P1169】[ZJOI2007]棋盘制作
棋盘制作 题目链接 这个题是[USACO5.3]巨大的牛棚Big Barn和玉蟾宫的结合 一道顶两道毒瘤! 题解: 首先,棋盘有两种选法: 1.任意白格(x,y) (x+y)%2=0 ,任意黑格(x, ...
- [ZJOI2007]棋盘制作 报表统计 矩阵游戏 时态同步
好长时间了..简要除草. 棋盘制作:经典dp... 报表统计:明显数据结构,,,但我没想出来,第一问可以用堆,第二问用平衡树. 矩阵游戏:好吧.一眼二分图,匈牙利过. 时态同步:树形dp,貌似不难,( ...
- 1057: [ZJOI2007]棋盘制作 - BZOJ
Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴 ...
最新文章
- 【Linux】一步一步学Linux——ldconfig命令(255)
- 未来人口出现负增长后,我国的房价何去何从?
- 某法院HP-P4500存储数据恢复案例
- Lua语法基础(1)---简介、基本数据类型、表达式
- mysql 查看当前连接及修改连接数
- 一、全国计算机三级数据库考试——理论知识总结(选择题)
- 〖教程〗Ladon免杀/.NET免杀/Exe2Ps1/Ps12Exe
- 动作捕捉用于蛇运动分析及蛇形机器人开发
- C 通过四个点计算两条直线的交点
- 160多个android开源码汇总
- 台式机通过笔记本的WIFI连接上网,并实现笔记本对台式机的远程连接
- ffmpeg Unknown encoder ‘libx264‘
- USB转串口驱动代码分析
- 拆 米家台灯_米家台灯1S及米家充电台灯测评报告
- Tableau锚点区间分析
- 2、igraph的简单实战
- 征信报告有误可以修改吗?
- 微信支付上线遇到的nss问题 (openjdk引起的祸)
- 持续更新:免费的IT学习资源分享
- Codeforces 1228 D. Complete Tripartite
热门文章
- mysql5.7 gtid问题_MySQL 5.7.5: 新语法WAIT_FOR_EXECUTED_GTID_SET 及存在的问题-阿里云开发者社区...
- ai快捷键常用表_掌握这些AI常用快捷键和小技巧,提高速度
- 虚拟服务器排行榜,虚拟服务器排行榜
- 如果一台通用计算机的,一台计算机,之所以有相当的灵活性和通用性,能解决许多.doc...
- MATLAB--卡尔曼滤波
- arduino nano引脚_使用直流电机和RF模块nRF24L01制作Arduino遥控小车
- 计算机专业html5的毕业论文范文,计算机专业毕业设计论文范文.doc
- python book.save_Python之操作excel
- 自动驾驶 6-2: 几何横向控制Lesson 2: Geometric Lateral Control - Pure Pursuit
- 机器学习- 吴恩达Andrew Ng Week11 知识总结 Photo OCR