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 的点作为“坏点”,然后在图中用悬线法找权值最大的子矩形 ...
随机推荐
- Input and Output-The input is all the sources of action for your app
Programs take input and produce output. The output is the result of doing something with the input. ...
- windows C++ new/delete内存大小
转载自:https://blog.csdn.net/will_hsbsch/article/details/21124055 windows 上,但使用C++语言new一块内存,用指针P指向这块内存, ...
- codeforces472D
Design Tutorial: Inverse the Problem CodeForces - 472D 给你了一个 n × n最短距离矩阵.(即矩阵中dis[u][v]为u点到v点的最短距离), ...
- CDN的作用与基本过程
转载请注明出处: leehao.me 或 https://blog.csdn.net/lihao21/article/details/52808747 简介 CDN,Content Distribu ...
- PAT——1028. 人口普查
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...
- 处理HTML表单(11)
PHP和Web表单 <?php if(isset($_POST["name"])){//isset()函数设置变量是否设置,并且不能为空 $name = $_POST[&qu ...
- Oracle分析函数巧妙使用
在 Oracle中使用Sql必须弄懂分析函数 Oracle开发专题之:分析函数(OVER) 1 Oracle开发专题之:分析函数2(Rank, Dense_rank, row_number) 6 Or ...
- http协议的总结
HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统,其主要特点概括如下: 1.支持客户/服务器模式. 2.简单快速:客户向服务器请求服务时,只需传送请求方法和 ...
- MySQL:如何导入导出数据表和如何清空有外建关联的数据表
1.导入导出 导入数据库:前提:数据库和数据表要存在(已经被创建) (1)将数据表 test_user.sql 导入到test 数据库的test_user 表中 [root@test ~]# mysq ...
- 课时17.WebStorm安装(理解)
开发工具(工欲善其事,必先利其器) 为了让大家更快的融入到编程的世界中去,不被繁琐的英文单词所困扰,不用每天编写很多没有意义的重复代码,提升大家的开发效率,今后的课程中我们统一采用开发工具来编写网页 ...