1222/2516. Kup
题目描述
Description
首先你们得承认今天的题目很短很简洁。。。
然后,你们还得承认接下来这个题目的描述更加简洁!!!
Task:给出一个N*N(1≤N≤2000)的矩阵,还给出一个整数K。要你在给定的矩阵中
求一个子矩阵,这个子矩阵中所有数的和的范围要在[k,2*k] 这个区间。
如果有多个这样的子矩阵,请随便输出一个。
Input
第一行包含两个整数K 和N(1≤K≤10^8,1≤N≤2000)。其意义如题目描述!
接下来有N 行,每行有N 个数,表示题目给出的矩阵。矩阵中的数都是非负数,而且
不大于maxlongint。
Output
输出文件仅包含一行,四个整数,分别是你找出来的矩阵的左上角坐标和右下角坐标。
如果不存在这样的子矩阵,请输出0 0 0 0。
Sample Input
Sample Input1:
4 3
1 1 1
1 9 1
1 1 1
Sample Input2:
8 4
1 2 1 3
25 1 2 1
4 20 3 3
3 30 12 2
Sample Input3:
8 4
12 2 1 3
25 1 2 1
4 20 3 3
3 30 12 2
Sample Output
Sample Output1:
0 0 0 0
Sample Output2:
1 2 2 4
Sample Output3:
1 1 1 1
Data Constraint
Hint
数据约定:
对于30%的数据,1≤N≤5
对于60%的数据,1≤N≤60
对于100%的数据1≤N≤2000
题解
一道神题
首先>2k的数肯定不能选,所以先找一个不包含>2k的数的最大矩阵
用栈可以O(n^2)求出
然后讨论一下
①sum<k
无解
②k<=sum<=2k
当前矩阵即为解
③sum>2k
设当前矩阵中第一行的和为Sum
再讨论一下
1、Sum<k
那么用sum-Sum,不会超过k的边界,所以减掉后继续
2、k<=Sum<=2k
当前行即为解
3、Sum>2k
由于保证了矩阵中没有>2k的数,所以依次把该行中的第一个数删掉
再再讨论一下
设删掉的数大小为a
A、a<k
那么Sum-a不会超过边界,减掉后继续
B、k<=a<=2k
a即为解
C、a>2k
不存在
code
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
using namespace std;
int a[2001][2001];
int f[2001][2001];
long long sum[2001][2001];
int d[2001][2];
int K,K2,n,i,j,k,l,x1,y1,x2,y2,t;
long long mx,Sum;
bool bz;
long long get(int x1,int y1,int x2,int y2)
{
return sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1];
}
int main()
{
// freopen("kup.in","r",stdin);
// freopen("kup.out","w",stdout);
scanf("%d%d",&K,&n);K2=K*2;
fo(j,1,n) f[0][j]=1;
fo(i,1,n)
{
fo(j,1,n)
{
scanf("%d",&a[i][j]);
if (a[i][j]<=K2)
f[i][j]=f[i-1][j];
else
f[i][j]=i+1;
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
}
fo(i,1,n)
{
t=0;
fo(j,1,n)
{
bz=0;
while (t && d[t][0]<f[i][j])
{
Sum=get(d[t][0],d[t][1],i,j-1);
if (Sum>mx)
{
mx=Sum;
x1=d[t][0];y1=d[t][1];
x2=i;y2=j-1;
}
--t;
bz=1;
}
if (f[i][j]<=i && (!t || f[i][j]<d[t][0]))
{
++t;
d[t][0]=f[i][j];
if (!bz)
d[t][1]=j;
}
}
while (t)
{
Sum=get(d[t][0],d[t][1],i,n);
if (Sum>mx)
{
mx=Sum;
x1=d[t][0];y1=d[t][1];
x2=i;y2=n;
}
--t;
}
}
if (mx<K)
{
printf("0 0 0 0\n");
return 0;
}
while (mx>K2)
{
Sum=get(x1,y1,x1,y2);
if (Sum>=K)
{
x2=x1;
mx=Sum;
while (mx>K2)
{
if (a[x1][y1]<K)
mx-=a[x1][y1++];
else
{
mx=a[x1][y1];
y2=y1;
}
}
}
else
mx-=Sum,++x1;
}
printf("%d %d %d %d\n",x1,y1,x2,y2);
fclose(stdin);
fclose(stdout);
return 0;
}
1222/2516. Kup的更多相关文章
- 【BZOJ-1127】KUP 悬线法 + 贪心
1127: [POI2008]KUP Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 317 Solved: 11 ...
- SQL SERVER错误:已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)
在SSMS(Microsoft SQL Server Management Studio)里面,查看数据库对应的表的时候,会遇到"Lock Request time out period e ...
- POJ 1222 (开关问题+高斯消元法)
题目链接: http://poj.org/problem?id=1222 题目大意:一堆开关,或开或关.每个开关按下后,周围4个方向开关反转.问使最后所有开关都关闭的,开关按法.0表示不按,1表示按. ...
- bzoj 1222 DP
用w[i]表示在A中用了i的时间时在B中最少用多长时间,然后转移就可以了. 备注:这个边界不好定义,所以可以每次用一个cur来存储最优值,然后对w[i]赋值就可以了. /*************** ...
- ural 1222. Chernobyl’ Eagles
1222. Chernobyl’ Eagles Time limit: 1.0 secondMemory limit: 64 MB A Chernobyl’ eagle has several hea ...
- 【wikioi】1222 信与信封问题(二分图+特殊的技巧)
http://wikioi.com/problem/1222/ 一开始我就想到这样构图的,即可能的连边.但是似乎无法判断. 然后想来想去想不出来.. 题解: 同样是二分图,将可能的连边,然后跑一次最大 ...
- Poj 1222 EXTENDED LIGHTS OUT
题目大意:给你一个5*6的格子,每个格子中有灯(亮着1,暗着0),每次你可以把一个暗的点亮(或者亮的熄灭)然后它上下左右的灯也会跟着变化.最后让你把所有的灯熄灭,问你应该改变哪些灯. 首先我们可以发现 ...
- poj 1222 EXTENDED LIGHTS OUT(位运算+枚举)
http://poj.org/problem?id=1222 题意:给一个确定的5*6放入矩阵.每一个格子都有一个开关和一盏灯,0表示灯没亮,1表示灯亮着.让你输出一个5*6的矩阵ans[i][j], ...
- bzoj 1222: [HNOI2001]产品加工 dp
1222: [HNOI2001]产品加工 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 381 Solved: 218[Submit][Status ...
随机推荐
- 数据测试002:利用Jmeter推送测试数据(上)
数据测试002:利用Jmeter推送测试数据(上) 刚才用Jmeter配置一下MySQL数据库花了点时间,好在最后都解决了,注意下面几个问题: 1)没有配置 “Cannot load JDBC dr ...
- 【Deep Learning Nanodegree Foundation笔记】第 0 课:课程计划
第一周 机器学习的类型,以及何时使用机器学习 我们将首先简单介绍线性回归和机器学习.这将让你熟悉这些领域的常用术语,你需要了解的技术进展,并了解深度学习在更大的机器学习背景中的位置. 直播:线性回归 ...
- 【VS开发】VC实现程序重启的做法
转载地址:http://blog.csdn.net/clever101/article/details/9327597 很多时候系统有很多配置项,修改了配置项之后能有一个按钮实现系统重启.所谓重启就是 ...
- Angular5 自定义scrollbar样式之 ngx-malihu-scrollbar
简介 此插件是 Malihu jQuery Scrollbar 为了在 Angular2+ 环境下使用,封装的一个ts的版本.提供directive和service. 从安装量来看,它比不过 perf ...
- 微信小程序资源整理
微信小程序相关的文档.教程.开源项目等资源的整理,以便于开发学习使用. —— —— 收录仅作个人学习使用,涉及侵权行为及时联系: maple_6392@163.com 项目地址:GitHub | 码云 ...
- vs资源视图加载失败
原因:引用了未知的资源,通过打开时报的错可以定位然后修改
- CentOS7之SVN服务配置
操作系统:CentOS Linux release 7.2.1511 (Core) Subversion软件版本:subversion-1.7.14-10.el7.x86_64 1.首先检查sv ...
- 初识MySQL <一>
创建一个 表 create table student( id int(10) not null unique auto_increment primary key, name varchar(30) ...
- P1224 [NOI2013]向量内积
传送门 发现这个内积和矩乘有点像,考虑构造一个 $n$ 行 $m$ 列的矩阵 $A$,每一行都是一个题目给定的 $m$ 维向量 设 $B=AA^T$ ,其中 $A^T$ 为 $A$ 的转置矩阵,那么对 ...
- 25、Python之禅
要求: 爬取网页你好,蜘蛛侠!中的Python之禅中英文版本,并且打印. 目的: 练习使用selenium爬取动态网页的信息. 练习selenium与BeautifulSoup的搭配使用. ...