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大小的黑白相间的方阵,对应八八六十四卦,黑白 ...
随机推荐
- Android实验报告
实验名称:Android程序设计 实验时间:2017.5.24 实验人员:20162309邢天岳(结对同学20162313苑洪铭) 实验目的:使用android stuidio开发工具进行基本安卓软件 ...
- git(一)快速入门
1.设置用户名 git config --global user.name '你的用户名' 2.设置用户名邮箱 git config --global user.email '你的邮箱' 3. ...
- Mybatis学习日志
在Mybatis深入学习的一周中,总感觉跟着师傅的视屏讲解什么都能懂,但实际自己操作的时候才发现自己一脸懵逼,不知道从何入手.但还好自己做了点笔记.在此记录一下自己浅度学习Mybatis遇到几个小问题 ...
- Ubuntu server 16.04 中文版 终端不能显示中文的解决办法探讨
对于刚安装成功的Ubuntu server 16.04中文版,在终端显示中文的地方总是出现菱形的图标,看来该版本内置终端暂时不支持中文显示, 还是本人不知道具体操作配置,现通过百度查找以下几个解决方案 ...
- php实现单,双向链表,环形链表解决约瑟夫问题
传智播客PHP学院 韩顺平 PHP程序员玩转算法第一季 http://php.itcast.cn 聊天篇: 数学对我们编程来说,重不重要? 看你站在什么样的层次来说. 如果你应用程序开发,对数学要求 ...
- python识别验证码——PIL,pytesser,pytesseract的安装
1.使用Python识别验证码需要安装Python的图像处理模块(PIL.pytesser.pytesseract) (安装过程需要pip,在我的Python中已经安装pip了,pip的安装就不在赘述 ...
- 新特性GTID
什么是GTID 每提交一个事务,当前的执行过程都会拿到一个唯一的标识符,此标识符不仅对其源mysql 实列是唯一的而在给定的复制环境中的所有mysql 实列也是唯一的,所哟的事务与其GTID 之间都是 ...
- python 中 reduce 函数的使用
reduce()函数也是Python内置的一个高阶函数. reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接 ...
- java程序员最不愿意看到的十件事
0.遍历结果集并构造对象如果你是个时髦的开发者而不是专业人员,显然你从某篇博客中读过有开发者遇到Hibernate的“性能问题”,因而认为ORM都不好,觉得手动编码“明显更好”.喜欢的话你当然可以用 ...
- 新概念英语(1-109)A Good Idea
Lesson 109 A good idea 好主意 Listen to the tape then answer this question. What does Jane have with he ...