二分+贪心 || CodeForces 551C GukiZ hates Boxes
2024-08-24 21:05:55
N堆石头排成一列,每堆有Ai个石子。有M个学生来将所有石头搬走。一开始所有学生都在原点, 每秒钟每个学生都可以在原地搬走一块石头,或者向前移动一格距离,求搬走所有石头的最短时间。
*解法:二分答案x(时间),即每位学生均有x秒的时间,模拟搬石头过程看能否搬完即可(一个人一个人计算,每个人均尽力完成任务即可)。
记得开longlong
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
#define SZ 100005
#define INF 1e15+10
long long a[SZ], b[SZ];
int n, m;
int check(long long x)
{
int flag = ;
long long p = , t;//时间x
for(int i = ; i <= n; i++) b[i] = a[i];
for(int i = ; i <= m; i++)
{
t = x - p;
while(t > && p <= n)
{
if(t > b[p]) {t -= b[p]; b[p] = ; p++; t--;}
//do{p++; t--;} while(b[p] == 0);
else if(t == b[p]) {b[p] = ; p++; t = ;}
else {b[p] -= t; t = ;}
}
}
for(int i = ; i <= n; i++)
if(b[i] > ) flag = ;
if(!flag) return ;
return ;
}
int main()
{
scanf("%d %d", &n, &m);
for(int i = ; i <= n; i++)
scanf("%lld", &a[i]);
long long l = , r = INF, mid;
while(r > l)
{
mid = (r + l) / ;
if(check(mid)) r = mid;
else l = mid + ;
}
printf("%lld\n", r);
return ;
}
最新文章
- 无法启动";D\projects\hello\Debug\hello.exe"; 系统找不到指定的文件。[LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏]
- Lazarus中TScreen类使用介绍
- IIS7.5解决应用程序池回收假死问题
- JS获取URL中参数值(QueryString)的4种方法分享<;转>;
- View Transform(视图变换)详解
- Ubuntu14.04下安装QQ 国际版
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.1
- 如何给循环中的对象添加事件--深入理解JavaScript的闭包特性
- WdatePicker日历控件用法
- 史上最全的java随机数/字符串生成算法(转)
- excel2json
- linux 下动态链接实现原理
- VS2012、2013使用Mysql数据库创建EF的AOD.NET实体模型
- eMMC基础技术6:eMMC data读写
- div和span与块级和行内标签
- Codeforces 101628A - Arthur&#39;s Language
- PHP函数总结 (六)
- 关于InputStream类的available()方法
- 【CodeForces】961 F. k-substrings 字符串哈希+二分
- zookeeper 大量连接断开重连原因排查