bzoj1127 [POI2008]KUP
Description
给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k]
n<2000
1<=k<=10^9
每个价格都是不大于2*10^9的非负整数
Solution
容易想到先把>2k的格子排除
显然那些本来就满足的单个格子可以直接输出
那么剩下的就是< k的格子了,相当于从01矩阵中找一个满足和>=k的、全为1的最大矩形,上单调栈维护单调不减即可
当k<=sum<=2k时,这是一个合法答案
当sum>2k时,由于每个格子都< k,我们必定可以删掉一行或者一列得到合法答案,即答案一定是找到最大矩形的子矩阵
Code
#include <stdio.h>
#include <string.h>
#define rep(i,st,ed) for (int i=st;i<=ed;++i)typedef long long LL;
const int N=2005;LL rc[N][N],a[N];
LL tot[N][N];
LL n,m;
int stack[N],top;LL cal(int a,int b,int c,int d) {return tot[c][d]-tot[a-1][d]-tot[c][b-1]+tot[a-1][b-1];
}bool output(int a,int b,int c,int d) {int tmp=cal(a,b,c,d);if (tmp<m) return false;if (tmp>=m&&tmp<=m*2) {printf("%d %d %d %d\n", b,a,d,c);return true;}if (d-b>c-a) {if (output(a+1,b,c,d)) return true;if (output(a,b+1,c,d)) return true;if (output(a,b,c-1,d)) return true;if (output(a,b,c,d-1)) return true;} else {if (output(a,b,c-1,d)) return true;if (output(a,b,c,d-1)) return true;if (output(a+1,b,c,d)) return true;if (output(a,b+1,c,d)) return true;}return false;
}int main(void) {scanf("%lld%lld",&m,&n);rep(i,1,n) {rep(j,1,n) {scanf("%d",&rc[i][j]);if (rc[i][j]>=m&&rc[i][j]<=m*2) {printf("%d %d %d %d\n", j,i,j,i);return 0;}tot[i][j]=tot[i-1][j]+tot[i][j-1]+rc[i][j]-tot[i-1][j-1];}}rep(j,1,n) {rep(i,1,n) {if (rc[j][i]<m) a[i]++;else a[i]=0;}top=0;rep(i,1,n) {while (top>0&&a[stack[top]]>=a[i]) {if (output(j-a[stack[top]]+1,stack[top-1]+1,j,i-1)) {// solve(j-a[stack[top]]+1,stack[top-1]+1,j,i-1);return 0;}top--;}stack[++top]=i;}while (top>0) {if (output(j-a[stack[top]]+1,stack[top-1]+1,j,n)) {// solve(j-a[stack[top]]+1,stack[top-1]+1,j,n);return 0;}top--;}}puts("NIE");return 0;
}
bzoj1127 [POI2008]KUP相关推荐
- bzoj1127: [POI2008]KUP
1127: [POI2008]KUP Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge Submit: 568 Solved: 2 ...
- 【BZOJ-1127】KUP 悬线法 + 贪心
1127: [POI2008]KUP Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge Submit: 317 Solved: 1 ...
- [POI2008]KUP
Description 给一个\(n\times n\)的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个\(n\times ...
- bzoj 1127 [POI2008]KUP——思路(悬线法)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1127 大于2*K的视为不能选的"坏点".有单个格子满足的就直接输出. 剩 ...
- BZOJ 1127: [POI2008]KUP 最大子矩阵
时空隧道 对于这个矩阵如果其中某一个元素满足要求直接输出即可-否则就把大于2k的点都视为不可选择的点-找出所有的极大子矩阵-如果存在一个极大子矩阵符合要求就直接输出-否则就寻找大于2k的极大子矩阵然后 ...
- BZOJ 1127 [POI2008]KUP 最大子矩阵
题意:链接 方法:最大子矩阵 解析: 先考虑1*n的情况,如果有在目标区间内的直接输出. 否则找是否存在一个区间即可. 然后能否推广呢? 可以的. 如果元素有在目标区间的值的话,直接输出即可. 否则的 ...
- 题解 - [POI2008]KUP-Plot purchase
[POI2008]KUP−Plotpurchase\mathrm{ [POI2008]\ KUP-Plot purchase}[POI2008] KUP−Plotpurchase 题解 题目意思 [P ...
- [bzoj1127][悬线法]KUP
Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个n*n的地图 Output 输出矩形的左 ...
- bzoj1131[POI2008]Sta*
bzoj1131[POI2008]Sta 题意: 给出一个n个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大.n≤1000000. 题解: 两次dfs.第一次dfs维护子树的大小.节点 ...
最新文章
- 组合求解器 + 深度学习 =?这篇ICLR 2020论文告诉你答案
- UIImageView
- 【数据分析】数据缺失影响模型效果?是时候需要missingno工具包来帮你了!
- https://blog.csdn.net/cscscscsc/article/details/50
- SpringBoot 集成 MyBatisPlus 模板
- MVC3.0 将网站设为首页和加为收藏的实现(IE/Firefox)
- 宠物狗图片分类之迁移学习代码笔记
- (30)VHDL实现比较器(有符号)
- flinkCdc的mysql配置及java测试代码
- 模仿豆丁、百度文库播放器
- format函数使用matlab,Matlab基本函数-format函数 | 学步园
- maven依赖的作用域\<scope>
- Matlab-数值计算方法作业
- 计算机控制面板无文件夹,电脑控制面板无恢复选项怎么办
- 岁月的剪影【五月世界末日】
- celery redis mysql_GitHub - FJUT/gxgk-wechat-server: 校园微信公众号后端,使用 Python、Flask、Redis、MySQL、Celery...
- 【转】每个程序员应该阅读的10本经典书籍
- 小程序自定义导航栏返回主页
- Dubbo源码解析-——服务引用
- Win98 is gone
热门文章
- 康考迪亚大学应用计算机科学,康考迪亚大学专业设置详情
- 大一C语言总结贴(持更) Part 10 随机步法
- 使用Word Embedding构造简洁有效的文本摘要系统
- UOS第三方软件没有通过系统安全验证
- android界面图标大全,Android UI设计常识和Android UI界面欣赏酷站推荐
- 视频存储网站服务器配置,视频存储服务器配置
- 一键加速去不掉加锁的_三种方法让你的Service不被“一键加速”和系统杀掉
- ssdb leveldb ldb文件恢复 ext4magic extundelete
- kernel - 制作linux开机logo
- Unity九宫格切割图片 2D Sprite