Chocolate Eating【二分】
题目链接: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【二分】的更多相关文章
- BZOJ 2016: [Usaco2010]Chocolate Eating( 二分答案 )
因为没注意到long long 就 TLE 了... 二分一下答案就Ok了.. ------------------------------------------------------------ ...
- [USACO10FEB] 吃巧克力Chocolate Eating (二分答案)
题目链接 Solution 先直接二分答案,然后贪心判断,一旦少于答案就吃一块. 思路很简单,有一点细节. 一天内可以不吃巧克力. 注意处理最后时没吃完的全部在最后一天吃完. Code #includ ...
- BZOJ 2016: [Usaco2010]Chocolate Eating
题目 2016: [Usaco2010]Chocolate Eating Time Limit: 10 Sec Memory Limit: 162 MB Description 贝西从大牛那里收到了 ...
- 2016: [Usaco2010]Chocolate Eating
2016: [Usaco2010]Chocolate Eating Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 224 Solved: 87[Su ...
- P2985 [USACO10FEB]吃巧克力Chocolate Eating
P2985 [USACO10FEB]吃巧克力Chocolate Eating 题目描述 Bessie has received N (1 <= N <= 50,000) chocolate ...
- bzoj2016[Usaco2010]Chocolate Eating*
bzoj2016[Usaco2010]Chocolate Eating 题意: n块巧克力,每次吃可以增加ai点快乐,每天早晨睡觉起来快乐值会减半,求如何使d天睡觉前的最小快乐值最大.n,d≤5000 ...
- NC24724 [USACO 2010 Feb S]Chocolate Eating
NC24724 [USACO 2010 Feb S]Chocolate Eating 题目 题目描述 Bessie has received \(N (1 <= N <= 50,000)\ ...
- 【BZOJ】2016: [Usaco2010]Chocolate Eating(二分)
http://www.lydsy.com/JudgeOnline/problem.php?id=2016 这些最大最小显然是二分. 但是二分细节挺多的...这里注意二分的区间,可以累计所有的可能,然后 ...
- bzoj 2016: [Usaco2010]Chocolate Eating【二分+贪心】
二分答案,贪心判断,洛谷上要开long long #include<iostream> #include<cstdio> using namespace std; const ...
随机推荐
- 18.4.09 模拟考 zhx P75
题目链接 https://files.cnblogs.com/files/lovewhy/P75.pdf P75 竞赛时间: ????年??月??日??:??-??:?? 注意事项(请务必仔细阅读) ...
- [JXOI2017]颜色
\(Orz\) 各位题解大佬,我来膜拜一发 还有单调栈实在没弄懂 法一:线段树+堆 首先,讨论区间的个数的题目,我们可以想到枚举一个端点\(r\),找到所有的\(l\) 我们不妨设:\(ml[i]\) ...
- intelij idea 2018 license server
http://www.cnblogs.com/jin-zhe/p/9267912.html
- [信息收集]11种绕过CDN查找真实IP方法【转载】
今天在看一些有关CDN的文章的时候,发现一篇写的蛮好的文章,故转载过来. 原文链接:https://www.cnblogs.com/qiudabai/p/9763739.html 0x01 验证是否存 ...
- TynSerial图片序列(还原)
TynSerial图片序列(还原) 笔者以生成图形验证码为例. function TForm1.VerifyCode(image: TImage): string; // 生成验证码和图像 var u ...
- python pip settools 安装基于源码 gdal安装需要c++相关库
- python 了解一下__dict__
写在前面 这几天在写关于描述器的博客,在了解描述器的机制的时候,翻了很多博客里面都提到了__dict__, 我想更多的了解一点描述器的机制,所以我得先弄清楚这个__dict__到底是干啥的. 计算机语 ...
- SVG-变换
transform变换 translate平移 <svg width="200" height="50"> <rect x="0&q ...
- colorMatrix色彩旋转设置
package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...
- js实现文本框支持加减运算的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/T ...