题目:洛谷P2985。

题目大意:有n块巧克力要吃d天,并且只能按顺序吃。一块巧克力有一个开心值,吃了就能增加开心值。一个人初始开心值为0,且每天早上开心值变为原来的一半。问如何吃巧克力才能使开心值最小的一天开心值最大(每天都按吃完巧克力后计算),且需要输出方案。

解题思路:最大化最小值问题,用二分答案。

贪心地扫描,对于一个答案,如果开心值不到这个答案,就一直吃巧克力即可。

最后输出吃的方案时也用此种贪心法。

注意如果最后巧克力没有吃完,则在最后一天全部吃掉。

C++ Code:

  1. #include<cstdio>
  2. #include<cctype>
  3. int n,d,a[50005];
  4. long long l,r,ans;
  5. inline int readint(){
  6. char c=getchar();
  7. for(;!isdigit(c);c=getchar());
  8. int d=0;
  9. for(;isdigit(c);c=getchar())
  10. d=(d<<3)+(d<<1)+(c^'0');
  11. return d;
  12. }
  13. bool ok(long long k){
  14. long long kx=0;
  15. int qk=1;
  16. for(int i=1;i<=d;++i){
  17. kx>>=1;
  18. while(kx<k&&qk<=n)kx+=a[qk++];
  19. if(kx<k)return false;
  20. }
  21. return true;
  22. }
  23. void print(long long k){
  24. long long kx=0;
  25. int qk=1;
  26. for(int i=1;i<=d;++i){
  27. kx>>=1;
  28. while(kx<k&&qk<=n){
  29. kx+=a[qk++];
  30. printf("%d\n",i);
  31. }
  32. }
  33. while(qk<=n)printf("%d\n",d),++qk;
  34. }
  35. int main(){
  36. n=readint(),d=readint();
  37. for(int i=1;i<=n;++i)a[i]=readint();
  38. l=0,r=50000000005LL,ans=0;
  39. while(l<=r){
  40. long long mid=(l+r)>>1;
  41. if(ok(mid))l=(ans=mid)+1;else
  42. r=mid-1;
  43. }
  44. printf("%lld\n",ans);
  45. print(ans);
  46. return 0;
  47. }

[USACO10FEB]吃巧克力Chocolate Eating的更多相关文章

  1. P2985 [USACO10FEB]吃巧克力Chocolate Eating

    P2985 [USACO10FEB]吃巧克力Chocolate Eating 题目描述 Bessie has received N (1 <= N <= 50,000) chocolate ...

  2. luogu P2985 [USACO10FEB]吃巧克力Chocolate Eating

    题目描述 Bessie拿到了N (1 <= N <= 50,000)块巧克力.她决定想个办法吃掉这些巧克力,使得它在吃巧克力的这段时间里,最不开心的一天尽可能的开心.并且一共吃D (1 & ...

  3. [USACO10FEB] 吃巧克力Chocolate Eating (二分答案)

    题目链接 Solution 先直接二分答案,然后贪心判断,一旦少于答案就吃一块. 思路很简单,有一点细节. 一天内可以不吃巧克力. 注意处理最后时没吃完的全部在最后一天吃完. Code #includ ...

  4. 洛谷——P2983 [USACO10FEB]购买巧克力Chocolate Buying

    P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...

  5. 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying 题解

    P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...

  6. 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying

    购买巧克力Chocolate Buying 乍一看以为是背包,然后交了一个感觉没错的背包上去. #include <iostream> #include <cstdio> #i ...

  7. P2983 [USACO10FEB]购买巧克力Chocolate Buying

    题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...

  8. 【洛谷】P2983 [USACO10FEB]购买巧克力Chocolate Buying(贪心)

    题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...

  9. 洛谷P2983 [USACO10FEB]购买巧克力Chocolate Buying

    题目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Chocolate Sto ...

随机推荐

  1. Day73-CMDB(资产管理采集)的三种实现方式

    # 采集数据 import subprocess import requests ret = subprocess.getoutput('ipconfig') # print(ret) # 正则处理获 ...

  2. Vue学习之路第十篇:简单计算器的实现

    前面九篇讲解了vue的一些基础知识,正所谓:学以致用,今天我们将用前九篇的基础知识,来模拟实现计算器的简单功能,项目价值不高,纯粹是为了加深掌握所学知识. 学前准备: 需要掌握JavaScript的e ...

  3. BZOJ 4942 NOI2017 整数 (压位+线段树)

    题目大意:让你维护一个数x(x位数<=3*1e7),要支持加/减a*2^b,以及查询x的第i位在二进制下是0还是1 作为一道noi的题,非常考验写代码综合能力,敲+调+借鉴神犇的代码 3个多小时 ...

  4. 浅谈optparse 解析命令行参数库

    使用的背景 在工作中我们经常要制定运行脚本的一些参数,因为有些东西是随着我么需求要改变的,所以在为们写程序的时候就一定不能把写死,这样我们就要设置参数 在python中我们可以通过sys 模板的arg ...

  5. [LeetCode] 350. 两个数组的交集 II intersection-of-two-arrays-ii(排序)

    思路: 先找到set的交集,然后分别计算交集中的每个元素在两个原始数组中出现的最小次数. class Solution(object): def intersect(self, nums1, nums ...

  6. 实现双向数据绑定mvvm

    实现双向数据绑定mvvm  

  7. webpack实战---安装操作

    什么是webpack? 他有什么优点?     首先对于很多刚接触webpack人来说,肯定会问webpack是什么?它有什么优点?我们为什么要使用它?     Webpack是前端一个工具,可以让各 ...

  8. [terry笔记]文件操作

    如下记录一次作业: 很显然,我这个应该属于二逼青年版,会在以后更新文艺青年版的答案. 1.模仿sed,一个文件中,用新字符串替换老字符串. # file = input("file_name ...

  9. 取消记录tableView选中效果

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self. ...

  10. fastjson 的简单使用

    public static void main(String[] args) { /*普通对象与json相互转换*/ User u = new User("miquan", &qu ...