1127: [POI2008]KUP
1127: [POI2008]KUP
https://lydsy.com/JudgeOnline/problem.php?id=1127
分析:
如果存在一个点大于等于k,小于等于2k的话,直接输出。
否则把点分成两类,一类是<k的,另一类是大于2k的,大于2k的一定没用。
然后找一个全部由小于2k的点中组成一个的矩形(悬线法),这个矩形有三种情况:1、<k,没用;2、大于等于k,小于等于2k,输出;3、大于2k,它的子矩阵中一定存在一个合法的矩阵(因为每个元素都是<k的,所以增加一个元素不可能直接使面积从小于k变成大于等于2k)。
考虑如何对一个大于等于2k的矩形找到它的合法的子矩阵。每次删掉一行或者一列一定可以找到。
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<cctype>
#include<set>
#include<queue>
#include<vector>
#include<map>
#include<cstdlib>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ; LL sum[N][N], k;
int a[N][N], U[N][N], L[N], R[N], n; void pd(int u,int d,int l,int r) {
if (u > d || l > r) return ;
LL now = sum[d][r] - sum[d][l - ] - sum[u - ][r] + sum[u - ][l - ];
if (now < k) return ;
if (now >= k && now <= k + k) {
printf("%d %d %d %d",l, u, r, d); exit();
}
if (d - u > r - l) {
pd(u + , d, l, r); pd(u, d - , l, r);
pd(u, d, l + , r); pd(u, d, l, r - );
}
else {
pd(u, d, l + , r); pd(u, d, l, r - );
pd(u + , d, l, r); pd(u, d - , l, r);
}
} int main() {
k = read(), n = read();
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j) {
a[i][j] = read();
sum[i][j] = a[i][j] + sum[i][j - ] + sum[i - ][j] - sum[i - ][j - ];
if (a[i][j] >= k && a[i][j] <= k + k) { printf("%d %d %d %d\n",j, i, j, i); return ; }
}
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
U[i][j] = a[i][j] <= k + k ? U[i - ][j] + : ;
for (int i = ; i <= n; ++i) L[i] = , R[i] = n + ;
for (int i = ; i <= n; ++i) {
int last = ;
for (int j = ; j <= n; ++j) {
if (a[i][j] <= k + k) L[j] = max(L[j], last + );
else last = j, L[j] = ;
}
last = n + ;
for (int j = n; j >= ; --j) {
if (a[i][j] <= k + k) R[j] = min(R[j], last - );
else last = j, R[j] = n + ;
}
for (int j = ; j <= n; ++j)
if (U[i][j] && L[j] >= && R[j] <= n) pd(i - U[i][j] + , i, L[j], R[j]);
}
puts("NIE");
return ;
}
1127: [POI2008]KUP的更多相关文章
- bzoj 1127 [POI2008]KUP——思路(悬线法)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1127 大于2*K的视为不能选的“坏点”.有单个格子满足的就直接输出. 剩下的都是<K的 ...
- [BZOJ] 1127: [POI2008]KUP
似曾相识的感觉 考虑另一个判断问题,给定一个k,问这个k是否可行 存在矩形和\(sum>2k\),则该矩阵不对判定做出贡献 存在矩形和\(sum\in [k,2k]\),则我们找到了一个解 于是 ...
- [BZOJ1127][POI2008] KUP子矩阵
Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个n*n的地图 Output 输出矩形的左 ...
- bzoj1127: [POI2008]KUP
Description 给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个n*n的地图 Output 输出矩形的左 ...
- bzoj1127[POI2008]KUP 悬线法
Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 485 Solved: 174[Submit][Status][D ...
- [POI2008]KUP
Description 给一个\(n\times n\)的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k] Input 输入k n(n<2000)和一个\(n\times ...
- 【BZOJ-1127】KUP 悬线法 + 贪心
1127: [POI2008]KUP Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 317 Solved: 11 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- bzoj 1127 KUP —— 最大子矩形+答案构造
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1127 首先,把权值 > 2*k 的点作为“坏点”,然后在图中用悬线法找权值最大的子矩形 ...
随机推荐
- ALICE源代码分析
前言 ALICE(爱丽丝)事实上是"人工语言计算机实体"的英文缩写. 它以前在往年(2000年.2001年和2004年)的勒布纳人工智能奖角逐中三次获胜.并在其它年度中也获过骄人的 ...
- weblogic之CVE-2016-3510反序列化分析
将反序列化的对象封装进了weblogic.corba.utils.MarshalledObject,然后再对MarshalledObject进行序列化,生成payload字节码.由于Marshalle ...
- Qt中QScrollArea类的简单使用心得
平台:windows 64位 Qt版本:5.5.1 MinGW 32bit 根据自己目前的需求简单说下怎么在QScrollArea滚动窗口中实现多个控件的滚动显示,先看看最 ...
- 【zigbee】【蓝牙】射频信号放大器兼容AT2401C
现在科技产品的不断进步,智能家居方面慢慢对信号和距离方面的要求渐渐增加.深圳市动能世纪科技有限公司不断的满足客户需求,推出了一款射频信号放大器AT2401C满足客户距离信号等等的需求.并全方位技术支持 ...
- java动态代理的基本思想以及简单的实现
代理模式 本人参考于代理模式及Java实现动态代理 不作为商业用途,只是借鉴于其思路.侵权即删. 原理:给某个对象提供一个代理对象,并且由代理对象控制原对象的访问,即不直接操控原对象,而是通过代理对 ...
- Android App的签名打包(晋级篇)
http://blog.csdn.net/linghu_java/article/details/6701666 Andriod应用程序如果要在手机或模拟器上安装,必须要有签名! 1.签名的意义 为了 ...
- Java异常体系和异常处理机制
异常简介 在程序运行过程中出现错误,导致程序出现非预期场景.异常处理可以保证出现错误后,控制接下来的程序流程,是选择定位错误信息,还是抛出异常或捕获异常.还是避免程序非正常退出,都取决于我们. Jav ...
- webpack4.26的详细配置,包含babel, eslint, postcss, 及各种所需loader,内含大量注释
github地址:https://github.com/qianxiaoning/demo-webpack4.26 内含详尽注释 欢迎大家star或者fork呀~ 目录结构: completeDemo ...
- webstorm 常用的快捷键
1. ctrl + shift + n: 打开工程中的文件,目的是打开当前工程下任意目录的文件.2. ctrl + j: 输出模板3. ctrl + b: 跳到变量申明处4. ctrl + alt + ...
- Google Cloud Platform 续
Google Cloud Platform 创建新实例 地区:australia-southeast1-a 机器类型:1个vCPU n1-standard-1 系统:Ubuntu 16.04 LTS ...