题目链接:https://ac.nowcoder.com/acm/contest/1577/K

题目大意:

给出n块巧克力,m天吃完。每块巧克力有a[i]快乐值,每天可以选择吃任意块或者不吃巧克力(按照给出的巧克力顺序吃),求如何吃巧克力可以使快乐值的最小值最大。

题解思路:

1.二分最小的开心值。check检查是否有方案可以使得每天的快乐值大于当前的mid,若存在,则答案可以增大,即l = mid + 1。若不存在,则答案减小,即r = mid - 1。

2.对于最后得出来的答案,再进行一次get()函数,得到每块巧克力在第几天被吃。而没有被吃到的巧克力全都在最后一天吃完。

代码如下:

 #include<stdio.h>
typedef long long ll;
const int MAXN = 5e4 + ; int n, m, day[MAXN];//n块 m天吃完
ll l, r, mid, a[MAXN], ans; int check(ll x) //每天都要达到x这么多的开心值
{
ll sum = ; //每天的开心值
int k = ; //巧克力编号
for(int i = ; i <= m; i ++)
{
sum /= ; //每天都折半
while(sum < x) //必须满足该天的开心值大于x
{
k ++;
sum += a[k];
if(k > n) //若无法满足
return ;
}
}
return ;
} void get(ll x)
{
ll sum = ;
int k = ;
for(int i = ; i <= m; i ++)
{
sum /= ;
while(sum < x)
{
k ++;
sum += a[k];
day[k] = i; //第k个巧克力在第几天吃
}
}
} int main()
{
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i ++)
{
scanf("%lld", &a[i]);
r += a[i];
}
while(l <= r)
{
mid = (l + r) / ;
if(check(mid))
{
l = mid + ;
ans = mid;
}
else
r = mid - ;
}
printf("%lld\n", ans);
get(ans);
for(int i = ; i <= n; i ++)
{
if(day[i])
printf("%d\n", day[i]);
else
printf("%d\n", m);
}
return ;
}

Chocolate Eating【二分】的更多相关文章

  1. BZOJ 2016: [Usaco2010]Chocolate Eating( 二分答案 )

    因为没注意到long long 就 TLE 了... 二分一下答案就Ok了.. ------------------------------------------------------------ ...

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

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

  3. BZOJ 2016: [Usaco2010]Chocolate Eating

    题目 2016: [Usaco2010]Chocolate Eating Time Limit: 10 Sec  Memory Limit: 162 MB Description 贝西从大牛那里收到了 ...

  4. 2016: [Usaco2010]Chocolate Eating

    2016: [Usaco2010]Chocolate Eating Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 224  Solved: 87[Su ...

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

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

  6. bzoj2016[Usaco2010]Chocolate Eating*

    bzoj2016[Usaco2010]Chocolate Eating 题意: n块巧克力,每次吃可以增加ai点快乐,每天早晨睡觉起来快乐值会减半,求如何使d天睡觉前的最小快乐值最大.n,d≤5000 ...

  7. NC24724 [USACO 2010 Feb S]Chocolate Eating

    NC24724 [USACO 2010 Feb S]Chocolate Eating 题目 题目描述 Bessie has received \(N (1 <= N <= 50,000)\ ...

  8. 【BZOJ】2016: [Usaco2010]Chocolate Eating(二分)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2016 这些最大最小显然是二分. 但是二分细节挺多的...这里注意二分的区间,可以累计所有的可能,然后 ...

  9. bzoj 2016: [Usaco2010]Chocolate Eating【二分+贪心】

    二分答案,贪心判断,洛谷上要开long long #include<iostream> #include<cstdio> using namespace std; const ...

随机推荐

  1. 18.4.09 模拟考 zhx P75

    题目链接 https://files.cnblogs.com/files/lovewhy/P75.pdf P75 竞赛时间: ????年??月??日??:??-??:?? 注意事项(请务必仔细阅读) ...

  2. [JXOI2017]颜色

    \(Orz\) 各位题解大佬,我来膜拜一发 还有单调栈实在没弄懂 法一:线段树+堆 首先,讨论区间的个数的题目,我们可以想到枚举一个端点\(r\),找到所有的\(l\) 我们不妨设:\(ml[i]\) ...

  3. intelij idea 2018 license server

    http://www.cnblogs.com/jin-zhe/p/9267912.html

  4. [信息收集]11种绕过CDN查找真实IP方法【转载】

    今天在看一些有关CDN的文章的时候,发现一篇写的蛮好的文章,故转载过来. 原文链接:https://www.cnblogs.com/qiudabai/p/9763739.html 0x01 验证是否存 ...

  5. TynSerial图片序列(还原)

    TynSerial图片序列(还原) 笔者以生成图形验证码为例. function TForm1.VerifyCode(image: TImage): string; // 生成验证码和图像 var u ...

  6. python pip settools 安装基于源码 gdal安装需要c++相关库

  7. python 了解一下__dict__

    写在前面 这几天在写关于描述器的博客,在了解描述器的机制的时候,翻了很多博客里面都提到了__dict__, 我想更多的了解一点描述器的机制,所以我得先弄清楚这个__dict__到底是干啥的. 计算机语 ...

  8. SVG-变换

    transform变换 translate平移 <svg width="200" height="50"> <rect x="0&q ...

  9. colorMatrix色彩旋转设置

    package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...

  10. js实现文本框支持加减运算的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/T ...