【BZOJ4716】假摔 二分+暴力
【BZOJ4716】假摔
Description
Input
Output
Sample Input
0 1 3 7
1 1 5 5
7 6 9 6
Sample Output
题解:一开始瞎写了写没写出来,看网上的题解神的不行,后来发现网上的题解都想多了!!!直接二分+暴力就行!
先二分答案,然后枚举右下角的点,然后不断移动左上角的点,直到不能再移动为止。因为每次移动要么会break要么会使方案数+1,并且k<250000,所以总复杂度是有保证的!是O(log(ans)*(n*m+k))!

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n,m,xn,yn,K;
int s[1010][1010];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
inline int calc(int a,int b,int c,int d)
{
return s[c][d]-s[a][d]-s[c][b]+s[a][b];
}
bool check(int x)
{
register int i,j,a,b;
int ret=K;
for(i=xn;i<=n;i++) for(j=yn;j<=m;j++)
{
for(a=i-xn;a>=0&&calc(a,j-yn,i,j)<x;a--) for(b=j-yn;b>=0&&calc(a,b,i,j)<x;b--)
{
ret--;
if(!ret) return 1;
}
}
return 0;
}
int main()
{
n=rd(),m=rd(),xn=rd(),yn=rd(),K=rd();
int i,j;
for(i=1;i<=n;i++) for(j=1;j<=m;j++) s[i][j]=s[i-1][j]-s[i-1][j-1]+s[i][j-1]+rd();
int l=0,r=s[n][m]+1,mid;
while(l<r)
{
mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%d",r);
return 0;
}
【BZOJ4716】假摔 二分+暴力的更多相关文章
- bzoj4716假摔
bzoj4716假摔 题意: 给出一个矩阵,求这个矩阵中权值和第k小的长在xmin到n之间,宽在ymin到m之间的子矩阵.n,m≤1000,k≤250000. 题解: 首先求出长为xmin,宽为ymi ...
- bzoj4716 假摔
Description [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指挥强大的舰队南征北战,从而成为了一名 dalao.在游戏关卡的攻略中,可能 ...
- 【bzoj5085】最大 二分+暴力
题目描述 给你一个n×m的矩形,要你找一个子矩形,价值为左上角左下角右上角右下角这四个数的最小值,要你最大化矩形的价值. 输入 第一行两个数n,m,接下来n行每行m个数,用来描述矩形 n, m ≤ 1 ...
- Codeforces 778A:String Game(二分暴力)
http://codeforces.com/problemset/problem/778/A 题意:给出字符串s和字符串p,还有n个位置,每一个位置代表删除s串中的第i个字符,问最多可以删除多少个字符 ...
- 10年省赛-Greatest Number (二分+暴力) + 12年省赛-Pick apples(DP) + UVA 12325(暴力-2次枚举)
题意:给你n个数,在里面取4个数,可以重复取数,使和不超过M,求能得到的最大的数是多少: 思路:比赛时,和之前的一个题目很像,一直以为是体积为4(最多选择四次)的完全背包,结果并不是,两两求和,然后二 ...
- LeetCode 81 - 搜索旋转排序数组 II - [二分+暴力]
假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] ). 编写一个函数来判断给定的目标值是否存在于数组中. ...
- D. Fedor and coupons 二分暴力
http://codeforces.com/contest/754/problem/D 给出n条线段,选出k条,使得他们的公共部分长度最大. 公共部分的长度,可以二分出来,为val.那么怎么判断有k条 ...
- #424 Div2 Problem C Jury Marks (二分 && 暴力 && std::unique && 思维)
题目链接 :http://codeforces.com/contest/831/problem/C 题意 :选手有一个初始积分,接下来有k个裁判为他加分或减分(时间顺序给出),然后告诉你n(1< ...
- HDU 1496 Equations 等式(二分+暴力,技巧)
题意:给出4个数字a,b,c,d,求出满足算式a*x1^2+b*x2^2+c*x3^2+d*x4^2=0的 (x1,x2,x3,x4) 的组合数.x的范围[-100,100],四个数字的范围 [-50 ...
随机推荐
- Java中Vector与ArrayList的差别具体解释
首先看这两类都实现List接口,而List接口一共同拥有三个实现类.各自是ArrayList.Vector和LinkedList.List用于存放多个元素,可以维护元素的次序,而且同意元素的反复. 3 ...
- 利用velocity.js将svg动起来
关于velocity.js Velocity.js是一款jquery动画引擎插件,它拥有与jquery中的$.animate()相同的API,还打包了颜色动画,转换,循环,easing效果,类动画.滚 ...
- Flume、Kafka、Storm结合
Todo: 对Flume的sink进行重构,调用kafka的消费生产者(producer)发送消息; 在Sotrm的spout中继承IRichSpout接口,调用kafka的消息消费者(Consume ...
- Python进行数值计算
1.计算积分 (1)计算定积分 from scipy import integrate #定义函数def half_circle(x): return (1-x**2)**0.5 pi_half, e ...
- 常用sql语句记录
1.表 --建表 if OBJECT_ID('Student') is not null create table Student( ID ,) not null, Name ), Code ), f ...
- php画图应用之验证码
在画图里面,就像之前所说的.php的画图是真正动态画图,尽管自己承认会出的图是非常不好看的.但我们主要关注的应该还是数据处理. 验证码我们差点儿无处不见,它的产生和画图技术是密不可分的.事实上,简单的 ...
- Gradle build.gradle to Maven pom.xml ,终于找到你了。
尊重原创:https://blog.csdn.net/kevin_luan/article/details/50996109 根据build.gradle 生成maven pox.xml 1.将以下配 ...
- 【Nginx-反向代理server】基础知识(二)之多进程模式
Nginx的多进程模式 nginx在启动后.会有一个master进程和多个worker进程.master进程主要用来管理worker进程,包括:接收来自外界的信号.向各worker进程发送信号,监控w ...
- java序列化,二进制和数据流
类的序列化需要支持Serializable接口,如果类支持序列化,可以通过ObjectOutPutStream和ObjectInputStream将对象和Stream之间进行方便的转换. 首先来 看一 ...
- python剑指网络篇二
在socket编程中 AF_INET 对应 IPv4 SOCK_STREAM 对应 TCP SOCK_DGRAM 对应 UDP