题目: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——思路(悬线法)的更多相关文章

  1. 【BZOJ】3039: 玉蟾宫 悬线法

    [题意]给定01矩阵,求最大全1子矩阵.n,m<=1000. [算法]动态规划(悬线法) [题解]★对于01矩阵中的任意一个全1极大子矩阵,都可以在其上边界遇到的障碍点处悬线到下边界的点x,则点 ...

  2. BZOJ 1057: [ZJOI2007]棋盘制作 悬线法求最大子矩阵+dp

    1057: [ZJOI2007]棋盘制作 Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑 ...

  3. [BZOJ] 1127: [POI2008]KUP

    似曾相识的感觉 考虑另一个判断问题,给定一个k,问这个k是否可行 存在矩形和\(sum>2k\),则该矩阵不对判定做出贡献 存在矩形和\(sum\in [k,2k]\),则我们找到了一个解 于是 ...

  4. [POJ1964]City Game (悬线法)

    题意 其实就是BZOJ3039 不过没权限号(粗鄙之语) 同时也是洛谷4147 就是求最大子矩阵然后*3 思路 悬线法 有个博客讲的不错https://blog.csdn.net/u012288458 ...

  5. P1169 [ZJOI2007]棋盘制作 悬线法or单调栈

    思路:悬线法\(or\)单调栈 提交:2次 错因:正方形面积取错了\(QwQ\) 题解: 悬线法 讲解:王知昆\(dalao\)的\(PPT\) 详见代码: #include<cstdio> ...

  6. 【BZOJ-1127】KUP 悬线法 + 贪心

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 317  Solved: 11 ...

  7. 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)) ...

  8. BZOJ 3039: 玉蟾宫( 悬线法 )

    最大子矩阵...悬线法..时间复杂度O(nm) 悬线法就是记录一个H向上延伸的最大长度(悬线), L, R向左向右延伸的最大长度, 然后通过递推来得到. ----------------------- ...

  9. 悬线法 || BZOJ 1057: [ZJOI2007]棋盘制作 || Luogu P1169 [ZJOI2007]棋盘制作

    题面:P1169 [ZJOI2007]棋盘制作 题解: 基本是悬线法板子,只是建图判断时有一点点不同. 代码: #include<cstdio> #include<cstring&g ...

随机推荐

  1. [Algorithms] Quicksort algorithm using TypeScript

    Quicksort (also called partition sort and pivot sort) is arguably the most used sorting algorithm. I ...

  2. vue2.0 自定义 折叠列表(Accordion)组件

    1.自定义  折叠列表 Accordion.vue (1)sass  版本 <!-- 折叠列表 组件 --> <template> <nav :class="$ ...

  3. linux与python

    linux一般都装有python,但是版本不一定,需要自己查看,如果版本过低,需要重装.查看python版本方法,直接在命令行输入 python,此时会进入python命令行,同时会显示python版 ...

  4. mysql存储过程之循环

    链接: http://www.blogjava.net/rain1102/archive/2011/05/16/350301.html

  5. Net is as typeof 运行运算符详解 net 自定义泛型那点事

    Net is as typeof 运行运算符详解   概述 在了解运行运算符的前提我们需要了解什么是RTTI ,在任何一门面向对象的语言中,都有RTTI这个概念(即 运行时). RTTI(Run-Ti ...

  6. shell-函数、数组、正则

    expect ssh远程脚本 expect非交互式 脚本代码如下: #!/usr/bin/expect set timeout spawn ssh -l root 192.168.1.1 expect ...

  7. caffe学习--Lenet5的应用和原理、实现----ubuntu16.04.2+caffe+mnist+train+test

    Lenet5的应用和原理.实现 ----------------------------------------------ubuntu16.04.2------------------------- ...

  8. python pyinotify模块详解

    转载于http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=23504396&id=2929446 1年多前就看过相关内容了, ...

  9. Linux学习笔记--ps命令(显示当前进程的命令)

    ps:英文名process,进程的意思. 1. 命令格式: ps [选项] 2. 经常使用选项: "ps -a" 显示一个终端的全部进程.除了会话引线 "ps -e&qu ...

  10. WildFly JBoss 应用程序服务器

    https://en.wikipedia.org/wiki/WildFly [实现基于面向服务的架构SOA的web应用和服务] WildFly,[1] formerly known as JBoss ...