题意:链接

方法:最大子矩阵

解析:

先考虑1*n的情况,如果有在目标区间内的直接输出。

否则找是否存在一个区间即可。

然后能否推广呢?

可以的。

如果元素有在目标区间的值的话,直接输出即可。

否则的话我们将大于2*k的点看作坏点。

则我们只要扫极大子矩阵再进行验证即可。

考虑如何验证总和满足目标区间的极大子矩阵。

如果是1*n的情况,因为所有的元素都小于k。

所以必定有一个前缀的和是在目标区间内的。

所以我们只需要缩y2即可。

如果是正常的矩阵的话,上下两行一定存在一行满足和小于k,干掉这一行后判断矩阵和是否满足目标区间,不满足则递归,满足则输出。

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 2010
using namespace std;
typedef long long ll;
int k,n;
ll sum[N][N];
ll a[N][N];
int le[N][N];
int ri[N][N];
int h[N][N];
ll getsum(int x1,int y1,int x2,int y2)
{return sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
}
void print(int x1,int y1,int x2,int y2)
{while(getsum(x1,y1,x2,y2)>2*k){if(x1==x2)y2--;else if(getsum(x1+1,y1,x2,y2)>=k)x1++;else x2--;}printf("%d %d %d %d\n",y1,x1,y2,x2);exit(0);
}
int main()
{scanf("%d%d",&k,&n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%lld",&a[i][j]);if(a[i][j]>=k&&a[i][j]<=2*k){printf("%d %d %d %d\n",j,i,j,i);return 0;}sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+a[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i][j]>2*k)le[i][j]=0;else le[i][j]=le[i][j-1]+1;}for(int j=n;j>=1;j--){if(a[i][j]>2*k)ri[i][j]=0;else ri[i][j]=ri[i][j+1]+1; }}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i][j]<=2*k&&a[i-1][j]<=2*k&&i!=1){h[i][j]=h[i-1][j]+1;le[i][j]=min(le[i-1][j],le[i][j]);ri[i][j]=min(ri[i-1][j],ri[i][j]);}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i][j]<=2*k){int tmp=getsum(i-h[i][j],j-le[i][j]+1,i,j+ri[i][j]-1);if(tmp>=k)print(i-h[i][j],j-le[i][j]+1,i,j+ri[i][j]-1);}}}puts("NIE");
} 

BZOJ 1127 [POI2008]KUP 最大子矩阵相关推荐

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

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

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

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

  3. bzoj1127: [POI2008]KUP

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

  4. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

  5. [BZOJ 1112] [POI2008] 砖块Klo 【区间K大】

    题目链接:BZOJ - 1112 题目分析 枚举每一个长度为k的连续区间,求出这个区间的最优答案,更新全局答案. 可以发现,这个区间的所有柱子最终都变成这k个数的中位数时最优,那么我们就需要查询这个区 ...

  6. bzoj 1124 [POI2008]枪战Maf 贪心

    [POI2008]枪战Maf Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 741  Solved: 295 [Submit][Status][Di ...

  7. BZOJ 1113: [Poi2008]海报PLA

    1113: [Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1025  Solved: 679 [Submit][Sta ...

  8. bzoj 1116: [POI2008]CLO(并查集)

    1116: [POI2008]CLO Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1180  Solved: 649 [Submit][Statu ...

  9. bzoj 1113: [Poi2008]海报PLA(栈)

    1113: [Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1272  Solved: 870 [Submit][Sta ...

最新文章

  1. python3 导入自定义函数
  2. springmvc+mybatis+ajax 批量插入数据
  3. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)
  4. [导入]Google Earth坐标集(能更看清这个世界喽!)
  5. Mac上的Dock 栏如何设置更好用?
  6. 小程序列表倒计时使用wxs实现
  7. BankNext 微服务:案例研究
  8. 停课集训 11.27
  9. 达梦DM7数据库服务启动异常,管道文件已存在,DmAPService dead but pid file exists
  10. C语言数据类型重新认识
  11. 几种归一化方法(Normalization Method)python实现
  12. 51单片机实战教程(32 人机界面编程9)
  13. matlab存储excel数据,怎么把matlab表格数据写入excel-怎么把matlab中处理的数据存入到excel中...
  14. 高速固态存储卡学习资料第701篇:基于6U VPX XC7V690T的阵列M.2高速固态存储卡
  15. Edge优质插件分享
  16. Ptcms在php7.2.10下的调试,each等方法
  17. 想入坑自动化测试?先了解下必备工具---Selenium
  18. 股票多因子模型之截面回归
  19. 内蒙古2019计算机考试安排,2019年下半年内蒙古计算机软考考试报名通知
  20. Vue3.0 - elementUiPlus Can‘t resolve ‘./fonts/element-icons.ttf‘

热门文章

  1. 【物联网】物联网项目之北向接口与南向接口
  2. 康考迪亚计算机科学需要gre吗,康考迪亚大学研究生院化学工具专业录取条件
  3. 【爬虫】如何解决爬虫爬取图片时遇到百度安全验证的问题?即页面上没有显示图片的源地址,没有img标签,只有div标签
  4. 树莓派视觉跟踪小车_树莓派智能小车结合摄像头opencv进行物体追踪
  5. 墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用
  6. 为什么苹果手机通话的时候不能录音?
  7. 一月集 一个会写诗的程序员2019
  8. MYSQL 列转行方法
  9. 多视几何009:对极几何
  10. 【微信公众平台开发之一】微信公众平台开发环境搭建