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 ...
随机推荐
- electron 缓存目录 禁用缓存
C:\Users\Administrator\AppData\Roaming\linksame // 禁用缓存 app.commandLine.appendSwitch("--disable ...
- C++字符串操作二
#include <iostream> #include <assert.h> using namespace std; //模拟实现strcmp函数. bool my_str ...
- 查看Laravel版本号的三种方法
1:最简单的用命令行实现 php artisan --version 2:查看文件 vendor\laravel\framework\src\Illuminate\Foundation\Applica ...
- JavaScript包管理器综述
JavaScript包管理器综述 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 对于JavaScript来说.包管理器 ...
- open-source Julius speech-recognition engine
http://julius.osdn.jp/en_index.php?q=index-en.html Open-Source Large Vocabulary CSR Engine Julius ht ...
- CGGeometry.h详解
本文转载至:http://blog.csdn.net/chengyingzhilian/article/details/7894195 这些是在CGGeometry.h里的 CGPoint.CGSi ...
- 使用JavaScript获取浏览器UserAgent
可以在浏览器地址栏输入about:version来查看UserAgent等信息 但是在Win10系统,本人亲测,IE和Edge用这样的方式都获取不到信息 在我惯用的QQ浏览器上倒是可以获取到 为了能方 ...
- 原来 Set 集合也可以排序
Java 集合类主要由两个接口派生而出: Collection 和 Map.在 Collection 集合中,我们经常用到的是 List 集合和 Map 集合,而 Set 集合出场的机会就相对比较的少 ...
- React + webpack 环境配置
安装配置Babel babel-preset-es2015 ES6语法包,使代码可以随意地使用ES6的新特性. babel-preset-react React语法包,专门用于React的优化,在代码 ...
- Linux下直接读写物理地址内存
虚拟 转 物理地址 virt_to_phys( *addr );物理 转 虚拟地址 phys_to_virt( *addr ); 如: unsigned long pProtectVA; phys ...