bzoj 1127 [POI2008]KUP——思路(悬线法)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1127
大于2*K的视为不能选的“坏点”。有单个格子满足的就直接输出。
剩下的都是<K的格子,求面积大于等于K的一个矩形;若还<=2*K就直接输出,否则一列一列删;
删去一列后若仍>=2*K,继续;若>=K&&<=2*K,就输出;若<K,则删去的那一列满足>=K,在那列上一格一格删,因为格子<K,所以不能从>2*K跳到<K,一定有解了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=;
int n,K,D,a[N][N],l[N][N],r[N][N],u[N][N],p0,p1;
ll s[N][N];
bool b[N][N],flag;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return fx?ret:-ret;
}
ll calc(int h1,int l1,int h2,int l2)
{
return s[h2][l2]-s[h2][l1-]-s[h1-][l2]+s[h1-][l1-];
}
void solve2(int h1,int h2,int j)
{
int sm=calc(h1,j,h2,j);
if(sm>=K&&sm<=D){printf("%d %d %d %d\n",j,h1,j,h2);return;}
for(int i=h2;i>=h1;i--)
{
sm-=a[i][j];
if(sm>=K&&sm<=D){printf("%d %d %d %d\n",j,h1,j,i-);return;}
}
}
void solve(int h1,int l1,int h2,int l2)
{
ll sm=calc(h1,l1,h2,l2);
if(sm<K)return;
if(sm>=K&&sm<=D){printf("%d %d %d %d\n",l1,h1,l2,h2);flag=;return;}
for(int i=l2;i>=l1;i--)
{
sm=calc(h1,l1,h2,i-);
if(sm>=K&&sm<=D)
{
printf("%d %d %d %d\n",l1,h1,i-,h2);
flag=;return;
}
if(sm<K)
{
solve2(h1,h2,i);flag=;return;
}
}
}
int main()
{
K=rdn(); n=rdn(); D=(K<<);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
a[i][j]=rdn(); if(a[i][j]>D)b[i][j]=;
if(a[i][j]>=K&&a[i][j]<=D)p0=j,p1=i;
s[i][j]=s[i][j-]+a[i][j];
}
if(p0){printf("%d %d %d %d\n",p0,p1,p0,p1);return ;}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)s[i][j]+=s[i-][j]; for(int i=,k;i<=n;i++)
for(int j=,k=;j<=n;j++)
{
if(!b[i-][j]) u[i][j]=u[i-][j]+;
else u[i][j]=;
if(!b[i][j])l[i][j]=max(k,l[i-][j]);
else k=j+;
}
for(int j=;j<=n;j++)r[][j]=n;//!
for(int i=,k;i<=n;i++)
for(int j=n,k=n;j>=;j--)
{
if(!b[i][j])r[i][j]=min(k,r[i-][j]);
else k=j-,r[i][j]=n;//for don't influence i+1,j
if(!b[i][j])solve(i-u[i][j]+,l[i][j],i,r[i][j]);
if(flag)return ;
}
puts("NIE");
return ;
}
bzoj 1127 [POI2008]KUP——思路(悬线法)的更多相关文章
- 【BZOJ】3039: 玉蟾宫 悬线法
[题意]给定01矩阵,求最大全1子矩阵.n,m<=1000. [算法]动态规划(悬线法) [题解]★对于01矩阵中的任意一个全1极大子矩阵,都可以在其上边界遇到的障碍点处悬线到下边界的点x,则点 ...
- BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp
1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...
- [BZOJ] 1127: [POI2008]KUP
似曾相识的感觉 考虑另一个判断问题,给定一个k,问这个k是否可行 存在矩形和\(sum>2k\),则该矩阵不对判定做出贡献 存在矩形和\(sum\in [k,2k]\),则我们找到了一个解 于是 ...
- [POJ1964]City Game (悬线法)
题意 其实就是BZOJ3039 不过没权限号(粗鄙之语) 同时也是洛谷4147 就是求最大子矩阵然后*3 思路 悬线法 有个博客讲的不错https://blog.csdn.net/u012288458 ...
- P1169 [ZJOI2007]棋盘制作 悬线法or单调栈
思路:悬线法\(or\)单调栈 提交:2次 错因:正方形面积取错了\(QwQ\) 题解: 悬线法 讲解:王知昆\(dalao\)的\(PPT\) 详见代码: #include<cstdio> ...
- 【BZOJ-1127】KUP 悬线法 + 贪心
1127: [POI2008]KUP Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 317 Solved: 11 ...
- 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向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...
- 悬线法 || BZOJ 1057: [ZJOI2007]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作
题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...
随机推荐
- Linux 主机被入侵后的处理案例
Linux主机被入侵后的处理案例 提交 我的留言 加载中 已留言 一次Linux被入侵后的分析 下面通过一个案例介绍下当一个服务器被rootkit入侵后的处理思路和处理过程,rootkit攻击是Lin ...
- PHP中使用Redis
Redis是什么 Redis ( REmote DIctionary Server ) , 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用 ...
- socketserver模块的使用
import socketserver class MyTCPhandler(socketserver.BaseRequestHandler): def handle(self): # print(s ...
- linux c 网络编程:用域名获取IP地址或者用IP获取域名 网络地址转换成整型 主机字符顺序与网络字节顺序的转换
用域名获取IP地址或者用IP获取域名 #include<stdio.h> #include<sys/socket.h> #include<netdb.h> int ...
- kubernetes对象之Job
系列目录 job是什么 对于ReplicaSet.ReplicationController等类型的控制器而言,它希望pod保持预期数目.持久运行下去,除非用户明确删除,否则这些对象一直存在,它们针对 ...
- 关于 angular cookie 设置的坑
初识Angular,才知道掉进了这么一个各种大坑的坑. 先说下对于$cookie.put 这几个方法,只有1.4以上版本才可以用,其余低于版本请使用 $cookieStore: 下面举例下使用方法: ...
- 使用Caffe完成图像目标检测 和 caffe 全卷积网络
一.[用Python学习Caffe]2. 使用Caffe完成图像目标检测 标签: pythoncaffe深度学习目标检测ssd 2017-06-22 22:08 207人阅读 评论(0) 收藏 举报 ...
- Windows下利用CMake和VS2013编译OpenCV
转载自:http://www.chengxulvtu.com/2014/03/19/windows_build-opencv-with-cmake-and-vs2013.html 获取OpenCV ...
- Webkit JNI
WebCoreFrameBridge.cpp BrowserFrame通过jni传下来的调用都会调用到WebCoreFrameBridge.cpp中的对应函数中,其他webkit的模块想回调信息给Br ...
- 【BZOJ2521】[Shoi2010]最小生成树 最小割
[BZOJ2521][Shoi2010]最小生成树 Description Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算 ...