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相关推荐

  1. bzoj1127: [POI2008]KUP

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 568  Solved: 2 ...

  2. 【BZOJ-1127】KUP 悬线法 + 贪心

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 317  Solved: 1 ...

  3. [POI2008]KUP

    Description 给一个\(n\times n\)的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个\(n\times ...

  4. bzoj 1127 [POI2008]KUP——思路(悬线法)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1127 大于2*K的视为不能选的"坏点".有单个格子满足的就直接输出. 剩 ...

  5. BZOJ 1127: [POI2008]KUP 最大子矩阵

    时空隧道 对于这个矩阵如果其中某一个元素满足要求直接输出即可-否则就把大于2k的点都视为不可选择的点-找出所有的极大子矩阵-如果存在一个极大子矩阵符合要求就直接输出-否则就寻找大于2k的极大子矩阵然后 ...

  6. BZOJ 1127 [POI2008]KUP 最大子矩阵

    题意:链接 方法:最大子矩阵 解析: 先考虑1*n的情况,如果有在目标区间内的直接输出. 否则找是否存在一个区间即可. 然后能否推广呢? 可以的. 如果元素有在目标区间的值的话,直接输出即可. 否则的 ...

  7. 题解 - [POI2008]KUP-Plot purchase

    [POI2008]KUP−Plotpurchase\mathrm{ [POI2008]\ KUP-Plot purchase}[POI2008] KUP−Plotpurchase 题解 题目意思 [P ...

  8. [bzoj1127][悬线法]KUP

    Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个n*n的地图 Output 输出矩形的左 ...

  9. bzoj1131[POI2008]Sta*

    bzoj1131[POI2008]Sta 题意: 给出一个n个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大.n≤1000000. 题解: 两次dfs.第一次dfs维护子树的大小.节点 ...

最新文章

  1. 组合求解器 + 深度学习 =?这篇ICLR 2020论文告诉你答案
  2. UIImageView
  3. 【数据分析】数据缺失影响模型效果?是时候需要missingno工具包来帮你了!
  4. https://blog.csdn.net/cscscscsc/article/details/50
  5. SpringBoot 集成 MyBatisPlus 模板
  6. MVC3.0 将网站设为首页和加为收藏的实现(IE/Firefox)
  7. 宠物狗图片分类之迁移学习代码笔记
  8. (30)VHDL实现比较器(有符号)
  9. flinkCdc的mysql配置及java测试代码
  10. 模仿豆丁、百度文库播放器
  11. format函数使用matlab,Matlab基本函数-format函数 | 学步园
  12. maven依赖的作用域\<scope>
  13. Matlab-数值计算方法作业
  14. 计算机控制面板无文件夹,电脑控制面板无恢复选项怎么办
  15. 岁月的剪影【五月世界末日】
  16. celery redis mysql_GitHub - FJUT/gxgk-wechat-server: 校园微信公众号后端,使用 Python、Flask、Redis、MySQL、Celery...
  17. 【转】每个程序员应该阅读的10本经典书籍
  18. 小程序自定义导航栏返回主页
  19. Dubbo源码解析-——服务引用
  20. Win98 is gone

热门文章

  1. 康考迪亚大学应用计算机科学,康考迪亚大学专业设置详情
  2. 大一C语言总结贴(持更) Part 10 随机步法
  3. 使用Word Embedding构造简洁有效的文本摘要系统
  4. UOS第三方软件没有通过系统安全验证
  5. android界面图标大全,Android UI设计常识和Android UI界面欣赏酷站推荐
  6. 视频存储网站服务器配置,视频存储服务器配置
  7. 一键加速去不掉加锁的_三种方法让你的Service不被“一键加速”和系统杀掉
  8. ssdb leveldb ldb文件恢复 ext4magic extundelete
  9. kernel - 制作linux开机logo
  10. Unity九宫格切割图片 2D Sprite