题目链接: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. (WAWAWAWAWAWAW) G. Periodic RMQ Problem

    没有联通门 : Codeforces G. Periodic RMQ Problem /* Codeforces G. Periodic RMQ Problem MMP 什么动态开点线段树啊 ... ...

  2. 记一次ArrayList产生的线上OOM问题

    前言:本以为(OutOfMemoryError)OOM问题会离我们很远,但在一次生产上线灰度的过程中就出现了Java.Lang.OutOfMemoryError:Java heap space异常,通 ...

  3. 对象转型、迭代器Iterator、Set集合、装箱与拆箱、基本数据类型与字符串的转换、TreeSet集合与对象

      包的声明与定义 需要注意的是,包的声明只能位于Java源文件的第一行. 在实际程序开发过程中,定义的类都是含有包名的: 如果没有显式地声明package语句,创建的类则处于默认包下: 在实际开发中 ...

  4. React拾遗(上)

    JSX代表Objects Babel转义器会把JSX转换成一个名为React.createElement()的方法调用. 下面两种代码的作用是完全相同的: const element = ( < ...

  5. ISO/IEC 9899:2011 条款5——5.2.4 环境限制

    5.2.4 环境限制 1.翻译与执行环境都约束了语言翻译器和库的实现.下面概述了对一个顺应标准实现的语言相关的环境限制:库相关的限制在条款7中讨论. 5.2.4.1 翻译限制 1.实现应该能够翻译并执 ...

  6. jmeter分布式遇到的问题记录

    遇到的问题记录: 问题一: 配置好执行机和调度机后,调度机跑执行机器出现下面的报错 java.io.FileNotFoundException:rmi_keystore.jks(系统找不到指定的文件) ...

  7. springboot Thymeleaf中格式化jsr310新日期时间类(LocalDateTime,LocalDate)--thymeleaf格式化LocalDateTime,LocalDate等JDK8新时间类

    依赖maven包 <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>th ...

  8. 基于JOSE4J 实现的OAUTH TOKEN

    jose4j / JWT Examples View History JSON Web Token (JWT) Code Examples Producing and consuming a sign ...

  9. PostgreSQL学习笔记——事务

    事务时需要在同一处理单元中执行的一系列更新处理的集合.通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理. 事务处理的终止指令包括COMMIT(提交处理)和ROLLBACK(取消处理)两种 ...

  10. python的jenkins三方包

    jenkinsapi 比较重,实现不好 python-jenkins 比较轻,建议使用,可以进行二次开发和封装