bzoj1127[POI2008]KUP 悬线法
Time Limit: 10 Sec Memory Limit: 162 MBSec Special Judge
Submit: 485 Solved: 174
[Submit][Status][Discuss]
Description
给一个n*n的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k]
Input
输入k n(n<2000)和一个n*n的地图
Output
输出矩形的左上和右下的列-行坐标或NIE
Sample Input
4 3
1 1 1
1 9 1
1 1 1
inputdata2
8 4
1 2 1 3
25 1 2 1
4 20 3 3
3 30 12 2
Sample Output
NIE
outputdata2
2 1 4 2
HINT
1<=k<=10^9 每个价格都是不大于2*10^9的非负整数
Source
首先可以特判是否有单个元素满足条件,如果没有就说明元素都是<k或>2k的
>2k的肯定不能选,对于<k的元素,我们将其染色为1 >2k染色为0
现在要做的就是找到颜色全为1的极大子矩阵,判断它其中是否有满足条件的矩阵
如果一个矩阵>=k那么它一定会有一个子矩阵满足条件,可以证明:
如果整个矩阵和<=2k直接输出,剩下的情况都是矩阵和>2k,一直缩小矩阵直到矩阵和<=2k
假设去掉第一行后,矩阵权值和>=k ,去掉第一行继续处理矩阵
假设去掉第一行后,矩阵权值和<k 那么由于矩阵和>2k,第一行肯定是>k的,直接处理第一行
当只有一行时还>2k直接缩减元素
代码调不出来了。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define N 2005
#define ll long long
using namespace std;
int n,m,l[N][N],a[N][N],r[N][N],h[N][N];ll sum[N][N];
ll calc(int x1,int y1,int x2,int y2)
{return sum[x2][y2]+sum[x1-][y1-]-sum[x1-][y2]-sum[x2][y1-];}
void print(int x1,int y1,int x2,int y2){
if(calc(x1,y1,x2,y2)>*m){
if(x1==x2)y2--;
else if(calc(x1+,y1,x2,y2)>=m)x1++;
else x2--;
}
printf("%d %d %d %d\n",y1,x1,y2,x2);
exit();
} int main(){
//freopen("/home/noilinux/Desktop/data.in","r",stdin);
//freopen("/home/noilinux/Desktop/wa.out","w",stdout);
scanf("%d%d",&m,&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
scanf("%d",&a[i][j]);
sum[i][j]=sum[i-][j]+sum[i][j-]-sum[i-][j-]+a[i][j];
if(a[i][j]>=m&&a[i][j]<=m*){
printf("%d %d %d %d\n",j,i,j,i);
return ;
}
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(a[i][j]<m)l[i][j]=l[i][j-]+;
else l[i][j]=;
for(int i=;i<=n;i++)
for(int j=n;j>=;j--)
if(a[i][j]<m)r[i][j]=r[i][j+]+;
else r[i][j]=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(a[i][j]<m)h[i][j]=h[i-][j]+;
else h[i][j]=; for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
if(a[i][j]>*m)continue;
if(h[i][j]>){
l[i][j]=min(l[i-][j],l[i][j]);
r[i][j]=min(r[i-][j],r[i][j]);
}
int x1=i-h[i][j]+,x2=i;
int y1=j-l[i][j]+,y2=j+r[i][j]-;
if(calc(x1,y1,x2,y2)>=m)print(x1,y1,x2,y2);
}
puts("NIE");
}
bzoj1127[POI2008]KUP 悬线法的更多相关文章
- 【BZOJ-1127】KUP 悬线法 + 贪心
1127: [POI2008]KUP Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 317 Solved: 11 ...
- BZOJ1127 POI2008KUP(悬线法)
首先显然地,如果某个格子的权值超过2k,其一定不在答案之中:如果在[k,2k]中,其自身就可以作为答案.那么现在我们只需要考虑所选权值都小于k的情况. 可以发现一个结论:若存在一个权值都小于k的矩阵其 ...
- 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 753 Solved: 444[Submit][Status][Discuss] D ...
- BZOJ_3039_玉蟾宫_(动态规划+悬线法)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3039 n*m的矩阵由R和F组成,求全是F的子矩阵的大小的三倍. 分析 悬线法: 浅谈用极大化思 ...
- BZOJ 1057: [ZJOI2007]棋盘制作( dp + 悬线法 )
对于第一问, 简单的dp. f(i, j)表示以(i, j)为左上角的最大正方形, f(i, j) = min( f(i + 1, j), f(i, j + 1), f(i + 1, j + 1)) ...
- BZOJ 3039: 玉蟾宫( 悬线法 )
最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...
- [POJ1964]City Game (悬线法)
题意 其实就是BZOJ3039 不过没权限号(粗鄙之语) 同时也是洛谷4147 就是求最大子矩阵然后*3 思路 悬线法 有个博客讲的不错https://blog.csdn.net/u012288458 ...
- [P1169] 棋盘制作 &悬线法学习笔记
学习笔记 悬线法 最大子矩阵问题: 在一个给定的矩形中有一些障碍点,找出内部不包含障碍点的,边与整个矩形平行或重合的最大子矩形. 极大子矩型:无法再向外拓展的有效子矩形 最大子矩型:最大的一个有效子矩 ...
- P1169 [ZJOI2007]棋盘制作 DP悬线法
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间的方阵,对应八八六十四卦,黑白 ...
随机推荐
- linux 50个常用命令
1.ls命令 ls是list的缩写,常用命令为ls(显示出当前目录列表),ls -l(详细显示当前目录列表),ls -lh(人性化的详细显示当前目录列表),ls -a(显示出当前目录列表,包含隐藏文件 ...
- Flask 学习 十二 用户评论
评论在数据库中的表示 由于评论和2个模型有关系,分别是谁发了评论,以及评论了哪个文章,所以这次要更新数据库模型 models.py 创建用户评论数据库模型 class Comment(db.Model ...
- 动手写IL到Lua的翻译器——准备
文章里的代码粘过来的时候格式有点问题,原因是一开始文章是在订阅号上写的(gamedev101,文末有二维码),不知道为啥贴过来就没了格式,还要手动删行号,就没搞了. 介绍下问题背景: 小说君正在参与的 ...
- 关于移动web教程免费发布
各位老铁大家好,最近经历了太多太多,精力一直不能集中做自己愿意做的事情. 移动Web课程一开始设置收费10块,其实本意是让大家感觉有支出,就会相对珍惜好好学习,但是发现收费把大部分人挡在门外,现在恢复 ...
- WPF自学入门(十一)WPF MVVM模式Command命令
在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了 ...
- Python爬虫基本原理
爬虫基本原理 1. 什么是爬虫 请求网站并提取数据的自动化程序. 2. 爬虫基本流程 发起请求 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待 ...
- New UWP Community Toolkit - RotatorTile
概述 UWP Community Toolkit 中有一个为图片或磁贴提供轮播效果的控件 - RotatorTile,本篇我们结合代码详细讲解 RotatorTile 的实现. RotatorTi ...
- ASP.NET MVC 5 SmartCode Scaffolding for Visual Studio.Net
介绍 ASP.NET MVC 5 SmartCode Scaffolding是集成在Visual Studio.Net开发工具中一个ASP.NET MVC Web应用程序代码生成框架,使用SmartC ...
- redis入门(15)redis的数据备份和恢复
redis入门(15)redis的数据备份和恢复
- 阿里云API网关(15)监控预警
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...