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 ;
}

最新文章

  1. 无法启动&quot;D\projects\hello\Debug\hello.exe&quot; 系统找不到指定的文件。[LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏]
  2. Lazarus中TScreen类使用介绍
  3. IIS7.5解决应用程序池回收假死问题
  4. JS获取URL中参数值(QueryString)的4种方法分享&lt;转&gt;
  5. View Transform(视图变换)详解
  6. Ubuntu14.04下安装QQ 国际版
  7. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.5.1
  8. 如何给循环中的对象添加事件--深入理解JavaScript的闭包特性
  9. WdatePicker日历控件用法
  10. 史上最全的java随机数/字符串生成算法(转)
  11. excel2json
  12. linux 下动态链接实现原理
  13. VS2012、2013使用Mysql数据库创建EF的AOD.NET实体模型
  14. eMMC基础技术6:eMMC data读写
  15. div和span与块级和行内标签
  16. Codeforces 101628A - Arthur&#39;s Language
  17. PHP函数总结 (六)
  18. 关于InputStream类的available()方法
  19. 【CodeForces】961 F. k-substrings 字符串哈希+二分
  20. zookeeper 大量连接断开重连原因排查

热门文章

  1. bzoj3653
  2. 库&amp;框架-----CDN网络引用总结
  3. JAVA基础--函数和数组03
  4. 关于TImer使用的注意
  5. (水题)洛谷 - P1149 - 火柴棒等式
  6. python help(int)
  7. spoj SUBST1 - New Distinct Substrings【SAM||SA】
  8. MyEclipse中安装SVN插件的最有效的方法
  9. Qt样式表之三:实现按钮三态效果的三种方法
  10. 递推DP HDOJ 5092 Seam Carving