CF GukiZ hates Boxes 【二分+贪心】
Professor GukiZ is concerned about making his way to school, because massive piles of boxes are blocking his way.
In total there are n piles of boxes, arranged in a line, from left to right, i-th pile (1 ≤ i ≤ n) containing ai boxes. Luckily, m students are willing to help GukiZ by removing all the boxes from his way. Students are working simultaneously. At time 0, all students are located left of the first pile. It takes one second for every student to move from this position to the first pile, and after that, every student must start performing sequence of two possible operations, each taking one second to complete. Possible operations are:
If i ≠ n, move from pile i to pile i + 1;
If pile located at the position of student is not empty, remove one box from it.
GukiZ's students aren't smart at all, so they need you to tell them how to remove boxes before professor comes (he is very impatient man, and doesn't want to wait). They ask you to calculate minumum time t in seconds for which they can remove all the boxes from GukiZ's way. Note that students can be positioned in any manner after t seconds, but all the boxes must be removed.
Input
The first line contains two integers n and m (1 ≤ n, m ≤ 105), the number of piles of boxes and the number of GukiZ's students.
The second line contains n integers a1, a2, ... an (0 ≤ ai ≤ 109) where ai represents the number of boxes on i-th pile. It's guaranteed that at least one pile of is non-empty.
Output
In a single line, print one number, minimum time needed to remove all the boxes in seconds.
Examples
Input
2 1
1 1
Output
4
Input
3 2
1 0 2
Output
5
Input
4 100
3 4 5 4
Output
5
Note
First sample: Student will first move to the first pile (1 second), then remove box from first pile (1 second), then move to the second pile (1 second) and finally remove the box from second pile (1 second).
Second sample: One of optimal solutions is to send one student to remove a box from the first pile and a box from the third pile, and send another student to remove a box from the third pile. Overall, 5 seconds.
Third sample: With a lot of available students, send three of them to remove boxes from the first pile, four of them to remove boxes from the second pile, five of them to remove boxes from the third pile, and four of them to remove boxes from the fourth pile. Process will be over in 5 seconds, when removing the boxes from the last pile is finished.
【题意】:有n个空地(1~n),空地上有a[i]块石头,m个学生,每个学生在0这个位置,有两个操作均需要消耗1秒
操作1:将当前所在位置的石头删除
操作2:往右走一个位置,问删除所有空地上的石头需要花费的最少时间
【分析】:二分枚举答案,贪心判断是否满足 即可。关键在于如何贪心,我们可以 从1向最后一个有石头的位置枚举(因为后面的都无关了,而且这样做方便后面的贪心),将中间遇到的石头都加起来,如果此时到当前位置所需花费时间+删除石头所需时间>=枚举值,这时候就需要一个学生,从0~枚举时间 对这段区间进行删除石头的操作,此时可以完美利用该学生,使其在枚举的时间内一刻不停地干活,剩下以此类推
二分总时间,贪心选择。已知总共有m个人,那么每个人的总时间都已经知道了,
我们从后往前或者从前往后贪心都可以,先用尽一个人的时间,不够再补,只要出现所有人的时间都用完了还不够的情况下返回false。
【详细注释代码】
#include<bits/stdc++.h>
const double eps = 1e-8;
#define ll long long
using namespace std;
ll a[100050];
int n,m;
ll ans,sum;
ll st,ed;
int Check(ll x)//二分时间
{
int cnt = m; //学生数量
ll sum = 0;
for(int i = 1; i<=st; i++)
{
sum+=a[i]; //总箱子个数 第i个位置
//如果此时到当前位置所需花费时间i+删除石头所需时间sum>=枚举值x,这时候就需要一个学生
while(sum + i >= x) //当箱子总数sum加上位置i大于时间x时
{
//对于已走的路程i,那么一个人有x-i(x是总时间,i是走路时间;故x-i是搬砖干活时间)时间来搬箱子,所以每增加一人,时间消耗可以减少x-i
sum -= x-i; //移动到了x-i位置以后,每增加一个学生就可以搬走一个箱子
cnt--; //消耗一个学生
if(cnt<0) return 0;
}
}
if(cnt==0)//删除所有空地上的石头需要花费的最少时间
{
if (sum <= 0) return 1;
else return 0;
}
return 1;
}
int main()
{
while(cin>>n>>m)
{
sum = 0;
for(int i =1; i<=n;i++)
{
scanf("%I64d",&a[i]);
if(a[i])
st = i;
sum += a[i];
}
ed = st + sum;
ll L = st,R = ed;
while(L<=R)
{
ll mid =(L+R)/2;
if(Check(mid))
{
ans = mid;
R = mid - 1;
}
else
{
L = mid + 1;
}
}
cout<<ans<<endl;
}
}
/*
T 这个格子是一个建筑物
G 这是一块空地
M 这是Wells和小姐姐浪漫的地方,当然也是个空地
D 这是Wells的家
H 这是一个狗仔队的窝点
7 3
TTTTTTT
TGGGGGT
TGGGGGT
MGGGGGD
TGGGGGT
TGGGGGT
TGHHGGT
*/
CF GukiZ hates Boxes 【二分+贪心】的更多相关文章
- CodeForces 551C - GukiZ hates Boxes - [二分+贪心]
题目链接:http://codeforces.com/problemset/problem/551/C time limit per test 2 seconds memory limit per t ...
- Codeforces 551C GukiZ hates Boxes(二分)
Problem C. GukiZ hates Boxes Solution: 假设最后一个非零的位置为K,所有位置上的和为S 那么答案的范围在[K+1,K+S]. 二分这个答案ans,然后对每个人尽量 ...
- Codeforces Round #307 (Div. 2) C. GukiZ hates Boxes 二分
C. GukiZ hates Boxes time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- Codeforces 551C GukiZ hates Boxes 二分答案
题目链接 题意: 一共同拥有n个空地(是一个数轴,从x=1 到 x=n),每一个空地上有a[i]块石头 有m个学生 目标是删除全部石头 一開始全部学生都站在 x=0的地方 每秒钟每一个学生都 ...
- Codeforces Round #307 (Div. 2) C. GukiZ hates Boxes 贪心/二分
C. GukiZ hates Boxes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/551/ ...
- 二分+贪心 || CodeForces 551C GukiZ hates Boxes
N堆石头排成一列,每堆有Ai个石子.有M个学生来将所有石头搬走.一开始所有学生都在原点, 每秒钟每个学生都可以在原地搬走一块石头,或者向前移动一格距离,求搬走所有石头的最短时间. *解法:二分答案x( ...
- codeforces 551 C GukiZ hates Boxes
--睡太晚了. ..脑子就傻了-- 这个题想的时候并没有想到该这样-- 题意大概是有n堆箱子从左往右依次排列,每堆ai个箱子,有m个人,最開始都站在第一个箱子的左边, 每个人在每一秒钟都必须做出两种选 ...
- 【24.67%】【codeforces 551C】 GukiZ hates Boxes
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Codeforces551 C. GukiZ hates Boxes
二分答案 + 贪心 传送门:$>here<$ $Solution$ 二分时间+贪心验证.思维难度主要在验证上,然而坑人的点却在n的取值上.那么先来谈如何验证.在已知时间的条件下,能否用一种 ...
随机推荐
- Struts1之html标签
Struts1的html标签主要是为了绘制HTML页面标签元素,通过与Struts1框架的集成,增强功能 首先,在使用前,需要引入tld文件 <%@ taglib prefix="ht ...
- div加了float后 四个特性
1.宽度变成0 2.左漂浮 或者右漂浮 3.后面的标签占据原来的位置 4对前面的div没有影响 他会浮动到前面div下面
- Str 函数
Str 函数 Visual Studio 2005 返回数字的 String 表示形式. Public Shared Function Str(ByVal Number As Object) ...
- [洛谷P4838]P哥破解密码
题目大意:求长度为$n$的$01$串中,没有连续至少$3$个$1$的串的个数 题解:令$a_1$为结尾一个$1$的串个数,$a_2$为结尾两个$1$的串的个数,$b$为结尾是$0$的串的个数.$a_1 ...
- SPOJ DQUERY (主席树求区间不同数个数)
题意:找n个数中无修改的区间不同数个数 题解:使用主席树在线做,我们不能使用权值线段树建主席树 我们需要这么想:从左向右添加一到主席树上,添加的是该数字处在的位置 但是如果该数字前面出现过,就在此版本 ...
- js生成图片
var image = new Image(); var c = document.getElementById("myCanvas"); var ctx = c.getConte ...
- POJ2699:The Maximum Number of Strong Kings(枚举+贪心+最大流)
The Maximum Number of Strong Kings Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2488 ...
- java封装的使用
一:前言 其实以前我们来学习java特性的时候,对于封装好想觉得没什么用处,至少我那个时候的感觉(不知道是不是我学的太浅薄了~),现在由于项目从零开始做得,在做得过程中我感觉到原来封装是这样用的. 二 ...
- HDFS之FileSystem
package cn.hx.test; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; impo ...
- bzoj 1297 矩阵乘法变形
首先对于矩阵乘法的功能有很多,记得有篇论文叫矩阵乘法在信息学竞赛中的应用,里面详细介绍了矩阵的 作用 其中一个就是求图的固定时间方案数,也就是给定一张图,每两个点之间由一条边长为1的边相连, 求任意两 ...