Description

给一个 n*n 的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于[k,2k]

Input

输入 k n(n<2000)和一个 n*n 的地图

Output

输出矩形的左上和右下的列-行坐标或 NIE

Sample Input #1

4 3

1 1 1

1 9 1

1 1 1

Sample Output #1

NIE

Sample Input #2

8 4

1 2 1 3

25 1 2 1

4 20 3 3

3 30 12 2

Sample Output #2

2 1 4 2

Solution

有种情况十分显然:当矩阵内有一个的值大于等于k且小于等于2k时可直接输出该点的坐标。否则,说明矩阵中的点分为两类:一是小于k的,一是大于2k的。另外,对于任何一个值大于2k的点,我们都不会去选他。所以我们可以找一个子矩阵使其内的所有值都小于k,那么只要矩阵的权值和大于k,就一定可以通过删去行和列使其和在区间[k,2k]之内。这样就把问题转化为在一个矩形中寻找极大子矩阵的问题,可以通过单调栈来实现。

每到一格时,就更新以这一格为终点的在这一列i中的最长的连续一段值均小于k(称为极大区间)的长度a[i]。扫完一行后,让每个点一次入栈,维护其a[i]的单调递增。这样能够保证第s[top]列到第s[top-1]+1列的极大区间长均不小于s[top]。每次弹出栈顶元素时都在以(j-s[top]+1,s[top]-1)为左上角、以(j,i-1)为右下角的子矩阵中寻找答案。如果该矩阵的第一行的和大于k,就删去第一行,否则删去最后一行。当两行重合时,就开始删列。只要统计到可行答案就输出并结束程序。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 2010
using namespace std;
int a[N];
bool mp[N][N];
long long pre[N][N];
void YES(int A,int B,int C,int D)
{
printf("%d %d %d %d",A,B,C,D);
exit(0);
}
int s[N],t;
long long cal(int A,int B,int C,int D)
{
return pre[C][D]-pre[A-1][D]-pre[C][B-1]+pre[A-1][B-1];
}
int K,n;
void cut(int A,int B,int C,int D)
{
while(cal(A,B,C,D)>2*K)
{
if(A==C) D--;
else if(cal(A+1,B,C,D)>=K) A++;
else C--;
}
YES(B,A,D,C);
}
int main()
{
scanf("%d%d",&K,&n);
int i,j,x,y;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&x);
if(x>=K&&x<=2*K) YES(j,i,j,i);
pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+x;
mp[i][j]=(x<K);
}
for(j=1;j<=n;j++)
{
for(i=1;i<=n;i++)
a[i]=mp[j][i]?a[i]+1:0;
for(i=1;i<=n;i++)
{
while(t&&a[s[t]]>=a[i])
{
if(cal(j-a[s[t]]+1,s[t-1]+1,j,i-1)>=K) cut(j-a[s[t]]+1,s[t-1]+1,j,i-1);
t--;
}
t++;s[t]=i;
}
while(t)
{
if(cal(j-a[s[t]]+1,s[t-1]+1,j,n)>=K) cut(j-a[s[t]]+1,s[t-1]+1,j,n);
t--;
}
}
puts("NIE");
return 0;
}

Test 3.27 T3 矩阵的更多相关文章

  1. Noip模拟61 2021.9.25

    T1 交通 考场上想了一个$NPC$.应该吧,是要求出图里面的所有可行的不重复欧拉路 无数种做法都无法解出,时间也都耗在这个上面的,于是就考的挺惨的 以后要是觉得当前思路不可做,就试着换一换思路,千万 ...

  2. 关于二维DP————站上巨人的肩膀

    意匠惨淡经营中ing, 语不惊人死不休........ 前几天学了DP,做了个简单的整理,记录了关于DP的一些概念之类的,今天记录一下刚学的一个类型 ----关于二维DP 那建立二维数组主要是干嘛用的 ...

  3. noip2007解题报告

    T1.统计数字 给出n个数,统计每个数字出现的个数. n小,快排解决. T2.字符串的展开 给出一个字符串,其中形如 d-h,4-9之类的就展开,(前面比后面小的保留,相等也是),三个参数,P1表示大 ...

  4. 【pG&&CYH-01】元旦联欢会

    题解: t1: 题解是循环矩阵 但我并没有往矩阵上想下去... 这个东西比较显然的是可以把它看成生成函数 然后就可以任意模数fft了 复杂度比题解优 $nlog^2$ t2: 随便推推式子就好了 t3 ...

  5. 为啥我做的RFM模型被人说做错了,我错哪了?

    本文转自知乎 作者:接地气的陈老师 ————————————————————————————————————————————————————— 有同学问:“为啥我做的RFM模型被客户/业务部门批斗,说 ...

  6. 2019.2.28&2019.3.1 考试

    因为没A/改几道题,就一起写了 题目在LOJ上都能找到 2019.2.28 100+20+12 前两个小时一直在睡觉+想题也没思路,我太菜了 T1 洗衣服 分开处理出洗衣服和烘干的时间,然后一边正着排 ...

  7. 2018焦作网络赛 - Poor God Water 一道水题的教训

    本题算是签到题,但由于赛中花费了过多的时间去滴吧格,造成了不必要的浪费以及智商掉线,所以有必要记录一下坑点 题意:方格从1到n,每一格mjl可以选择吃鱼/巧克力/鸡腿,求走到n格时满足 1.每三格不可 ...

  8. Gersgorin 圆盘

    将学习到什么 好多.   Gersgorin 圆盘定理   对任何 \(A \in M_n\),我们总可以记 \(A=D+B\),其中 \(D=\mathrm{diag}(a_{11},\cdots, ...

  9. Python学习day39-并发编程(各种锁)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

随机推荐

  1. React Native商城项目实战16 - 购物中心详细页

    逻辑分析: 首页(Home)加载的购物中心组件(ShopCenter),传递url数据: ShopCenter里根据url加载购物中心详细页组件(ShopCenterDetail), ShopCent ...

  2. Python编程:从入门到实践—函数

    从函数中修改列表 一家为用户提交的设计制作3D打印模型的公司,需要打印的设计存储在一个列表中,打印后移到另一个列表中. #!/usr/bin/env python # -*- coding:utf-8 ...

  3. 模拟赛DAY 2 T2不老梦

    [题目背景] 于万人中万幸得以相逢,刹那间澈净明通. 成为我所向披靡的勇气和惶恐,裂山海,堕苍穹. 爱若执炬迎风,炽烈而哀恸,诸般滋味皆在其中. 韶华宛转吟诵,苍凉的光荣,急景凋年深情难共. ——银临 ...

  4. 接口自动化之get/post请求

    本篇旨在对get和post请求做一个总结 目录 1.get请求 2.post请求 1.get请求 get请求一般形式相同,仅带url即可发送请求 对于https协议的请求,加一个特殊处理即可(veri ...

  5. Vue组件父子间通信01

    子组件传递数据 用户已经登录 父组件接收数据 并显示列表,未登录不显示列表 /* 有两个组件,分别是main-component,header-component.main-component是由he ...

  6. 【ABAP系列】SAP ABAP实现发送外部邮件(添加附件)功能

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP ABAP实现发送外部邮件(添 ...

  7. 浅谈vue对seo的影响

    不可否定的是,vue现在火.但是在实际项目中,特别是像一下交互网站,我们不可避免会考虑到的是seo问题,这直接关系到我们网站的排名,很多人说用vue搭建的网站不能做优化,那我们真的要放弃vue,放弃前 ...

  8. C#建造者模式

    /// <summary> /// 电脑类 /// </summary> public class Computer { //电脑组件集合 private IList<s ...

  9. 解决:”ssh-keygen 不是内部或外部命令“ 的问题

    相信大家在 码云生成/添加SSH公钥的过程中遇到一个比较常见的问题, 在cmd,命令行输入 ssh-keygen -t rsa -C "xxxxx@xxxxx.com" ; xxx ...

  10. BP神经网络反向传播之计算过程分解(详细版)

    摘要:本文先从梯度下降法的理论推导开始,说明梯度下降法为什么能够求得函数的局部极小值.通过两个小例子,说明梯度下降法求解极限值实现过程.在通过分解BP神经网络,详细说明梯度下降法在神经网络的运算过程, ...