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 的点作为“坏点”,然后在图中用悬线法找权值最大的子矩形 ...
随机推荐
- 「bzoj 4025: 二分图」
题目 显然二分图没有奇环 于是考虑使用并查集维护一下看看是否存在奇环 我们可以考虑加权并查集,维护出\(x\)到\(fa_x\)的实际距离 由于我们只需要考虑奇偶性,于是我们处理出到根的路径异或一下就 ...
- Counting swaps
Counting swaps 给你一个1-n的排列,问用最少的交换次数使之变为递增排列的方案数\(mod\ 10^9+7\),1 ≤ n ≤ 10^5. 解 显然最少的交换次数不定,还得需要找到最小交 ...
- Kali更新与升级
当用户使用一段时间以后,可能对总是在没有任何变化的系统中工作感到不满,而是渴望能像在Windows系统中一样,不断对自己的Linux进行升级.另外,Linux本身就是一个开放的系统,每天都会有新的软件 ...
- 判断是否POST提交
if(strtolower($_SERVER['REQUEST_METHOD']) == 'post'){} //判断是否POST提交
- SQLIO 磁盘測试工具參考
SQLIO 下载地址:id=20163">SQLIO Disk Subsystem Benchmark Tool 默认文件夹:C:\Program Files\SQLIO 以命令行执行 ...
- RAC日常维护命令
olsnodes -n 查看节点个数 crs_stat -t 查看RAC中各节点的资源状态 crs_stat -p 查看RAC的节点的配置 crsctl命令: 对于crsctl命 ...
- I、Python 环境搭建
I.安装Python https://www.python.org/downloads/windows/ 下载路径总是变,认准那个名字 安装, 记住,所有语言都推荐安装在 默认路径,不要相信那些让你改 ...
- K8s集群安装和检查(经验分享)
一.组件方式检查 1. Master节点: root>> kubectl get cs 2. Node 节点: 无 二.服务方式检查 1. Master 节点: root>> ...
- select 宽度跟随option内容自适应
传统的select在没有设置固定宽度的情况,会因为自身的 option 选项的里,宽度最宽的option作为select本身的宽度 例如 可见效果为: select的宽度因为"宽度最宽的op ...
- 随记181120Service Fabric问题
https://github.com/Azure/service-fabric-issues/issues/1056 不能启动node one /five 问题