牛客 NC24724 Feb S]Chocolate Eating 解题报告

news2024/11/26 4:43:53

原题链接:

登录—专业IT笔试面试备考平台_牛客网

题目描述:

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

Bessie has received N (1 <= N <= 50,000) chocolates from the bulls, but doesn't want to eat them too quickly, so she wants to plan out her chocolate eating schedule for the next D (1 <= D <= 50,000) days in order to maximize her minimum happiness level over the set of those days.
Bessie's happiness level is an integer that starts at 0 and halves (rounding down if necessary) over night as she sleeps. However, when she eats chocolate i, her happiness level increases by integer HiH_iHi​ (1 <= HiH_iHi​ <= 1,000,000). If she eats chocolates on a day, her happiness for that day is considered the happiness level after she eats the chocolates. Bessie insists that she eat the chocolates in the order that she received them.
If more than one optimal solution exists, print any one of them.
Consider a sequence of 5 chocolates to be eaten over a period of 5 days; they respectively bring happiness (10, 40, 13, 22, 7).

If Bessie eats the first chocolate (10 happiness) on the first day and then waits to eat the others, her happiness level is 10 after the first day.

Here is the complete schedule which turns out to maximize her minimum happiness:
  Day  Wakeup happiness   Happiness from eating   Bedtime happiness
   1            0                10+40                  50
   2           25                 ---                   25
   3           12                  13                   25
   4           12                  22                   34 
   5           17                   7                   24
The minimum bedtime happiness is 24, which turns out to be the best Bessie can do.

输入描述:

* Line 1: Two space separated integers: N and D
* Lines 2..N+1: Line i+1 contains a single integer: HiH_iHi​

输出描述:

* Line 1: A single integer, the highest Bessie's minimum happiness can be over the next D days
* Lines 2..N+1: Line i+1 contains an integer that is the day on which Bessie eats chocolate i

输入

5 5 
10 
40 
13 
22 
7 

输出

24
1
1
3
4
5 

题目大意:

 

解题思路:

典型的二分+检验答案。最大化最小值问题。

我们可以假设最小快乐指数,然后检查这个假设的快乐指数是否可达,检查的方式是每天如果快乐值足够,就不吃巧克力,否则吃一块,如果巧克力吃完了还不能达到假定的快乐指数,则这个快乐指数是不可达的。

提供两种二分的写法,具体细节看代码和注释。

代码1(CPP):

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 5e4 + 100;
const int INF = 0x3fffffff;
const int mod = 1000000007;
ll n, d, h[maxn], ans[maxn];

bool check(ll x) {
    ll v = 0;
    int p = 1;
    for (int i = 1; i <= d; i++) {
        v /= 2;
        while (v < x && p <= n) {
            v += h[p];
            ans[p] = i;
            p++;
        }
        if (v < x) {
            return false;
        }
    }
    for (; p <= n; p++) {  // 坑点,所有巧克力都必须吃完,所以如果最后有剩下的必须吃掉
        ans[p] = d;
    }
    return true;
}

void solve() {
    cin >> n >> d;
    ll l = 0, r = 0, k;
    for (int i = 1; i <= n; i++) {
        cin >> h[i];
        r += h[i];
    }
    while (l < r) {  // 写法一,不抛弃mid
        ll mid = (l + r + 1) / 2;  // 特别注意,不抛弃mid的写法求最大化最小值时,mid=(l+r+1)/2
        if (check(mid)) {
            l = mid;
        } else {
            r = mid - 1;
        }
    }
    k = l;
    check(k);  // 坑点,最后二分完毕之后,,ans数组里不一定是答案的状态
    cout << k << endl;
    for (int i = 1; i <= n; i++) {
        cout << ans[i] << endl;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cout << fixed;
    cout.precision(18);

    solve();
    return 0;
}

代码2(CPP):

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 5e4 + 100;
const int INF = 0x3fffffff;
const int mod = 1000000007;
ll n, d, h[maxn], ans[maxn];

bool check(ll x) {
    ll v = 0;
    int p = 1;
    for (int i = 1; i <= d; i++) {
        v /= 2;
        while (v < x && p <= n) {
            v += h[p];
            ans[p] = i;
            p++;
        }
        if (v < x) {
            return false;
        }
    }
    for (; p <= n; p++) {  // 坑点,所有巧克力都必须吃完,所以如果最后有剩下的必须吃掉
        ans[p] = d;
    }
    return true;
}

void solve() {
    cin >> n >> d;
    ll l = 0, r = 0, k;
    for (int i = 1; i <= n; i++) {
        cin >> h[i];
        r += h[i];
    }
    while (l <= r) {  // 写法二,抛弃mid
        ll mid = (l + r) / 2;
        if (check(mid)) {
            // 或者也可以在这里记录答案 k = mid
            l = mid + 1;
        } else {
            r = mid - 1;
        }
    }
    k = l - 1;  // 注意这种写法这里的答案不应该是l,应该是l - 1
    check(k);  // 坑点,最后二分完毕之后,,ans数组里不一定是答案的状态
    cout << k << endl;
    for (int i = 1; i <= n; i++) {
        cout << ans[i] << endl;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cout << fixed;
    cout.precision(18);

    solve();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/499045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Notepad++ 配置python环境及虚拟环境

背景&#xff1a; 在执行某些项目的时候&#xff0c;经常会否遇到这样一种情况(以python语言为例)&#xff1a;不想在python的基础环境下运行&#xff0c;创建了虚拟环境来装相关项目的包&#xff0c;但是每次使用都要切换到虚拟环境下面使用"activate "命令激活环境…

C++linux高并发服务器项目实践 day8

Clinux高并发服务器项目实践 day8 内存映射内存映射相关系统调用例子思考问题案例2案例3 信号信号的5中默认处理动作信号相关函数kill、raise和abort函数alarm函数案例 setitimer函数 signal信号捕捉函数 内存映射 内存映射是将磁盘文件的数据映射到内存&#xff0c;用户通过修…

Spring MVC数据格式化与验证以及国际化和中文乱码处理

目录 Spring MVC数据格式化 基本介绍 ConversionService converters 基本数据类型和字符串自动转换 代码实例 -页面演示方式 创建Monster 类 创建data_valid.jsp 创建MonsterHandler类 创建monster_addUI.jsp 解读: 说明 阶段测试一下 ​编辑 继续完成功能 创建s…

springboot+vue校园疫情防控系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园疫情防控系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

理想汽车VS特斯拉,电动汽车正在吞噬世界

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 电动汽车正在吞噬世界 长期以来&#xff0c;电动汽车在美国一直是一项边缘技术&#xff08;当时主要是加州的环保主义者和科技圈在关注&#xff09;。即使现在如日中天的特斯拉(TSLA)&#xff0c;当年也是在成立三年后的20…

【案例1】图书馆管理系统毕业论文

博主介绍&#xff1a; &#x1f680;自媒体 JavaPub 独立维护人&#xff0c;全网粉丝打大于100w&#xff0c;csdn博客专家、java领域优质创作者&#xff0c;51ctoTOP10博主&#xff0c;知乎/掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和副业。&#x1f680; …

npm私有仓库(nexus)-Vue组件发布到nexus

1、创建组件项目 进入项目目录并 执行 npm install 安装依赖&#xff0c;npm run dev 运行&#xff0c;此时浏览器打开 http://localhost:8080 可看到初始化页面 2、在 src 目录下新建测试组件&#xff0c;如下图所示 3、项目目录下新建组件暴露文件 4、修改 package.json pri…

Spring Boot项目使用maven的jib插件打docker使用所需的镜像tar包

jib插件介绍 Jib是一个由Google开发的基于Docker镜像构建的工具&#xff0c;它的Maven插件可以让我们以更高效的方式构建和管理Docker镜像。使用Jib&#xff0c;我们可以摆脱手动编写Dockerfile的繁琐过程&#xff0c;而是直接将我们的Java应用程序打包为镜像&#xff0c;并将…

CPU狂飙900%,该怎么处理?

一位小伙伴面试了 网易&#xff0c;遇到了一个 性能类的面试题&#xff1a;CPU飙升900%&#xff0c;该怎么处理&#xff1f; 可惜的是&#xff0c;以上的问题&#xff0c;这个小伙没有回答理想。 最终&#xff0c;导致他网易之路&#xff0c;终止在二面&#xff0c;非常可惜 …

MySQL学习笔记第九天

第08章聚合函数 上一章讲到了 SQL 单行函数。实际上 SQL 函数还有一类&#xff0c;叫做聚合&#xff08;或聚集、分组&#xff09;函数&#xff0c;它是对一组数据进行汇总的函数&#xff0c;输入的是一组数据的集合&#xff0c;输出的是单个值。 1.聚合函数介绍 什么是聚合…

智能优化算法:袋獾优化算法-附代码

智能优化算法&#xff1a;袋獾优化算法 文章目录 智能优化算法&#xff1a;袋獾优化算法1. 袋獾优化算法1.1 初始化1.2 策略一&#xff1a;以腐肉为食&#xff08;探索阶段&#xff09; 2.实验结果3.参考文献4.Matlab 摘要&#xff1a;袋獾优化算法&#xff08;Tasmanian Devil…

MyBatis官方文档学习笔记(一)

本笔记根据mybatis官方文档顺序学习&#xff0c;根据本笔记可快速掌握mybatis的使用。 1 快速开始 1.1 快速开始 1.1.1 安装 使用MyBatis之前必须要安装mybatis-x.x.x.jar驱动文件到类路径中&#xff0c;如果使用的是Maven工程&#xff0c;则只需要导入下面的依赖即可&…

Java集合-Java集合基础

目录 讲一讲Java集合吧 集合的使用 为什么要使用集合&#xff1f; 如何选用集合? Collection Collection与Collections的区别是什么&#xff1f; Collections.sort和Arrays.sort的实现原理 为何Collection不从Cloneable和Serializable接口继承&#xff1f; 线程安全集…

面向开发人员的 ChatGPT 提示语教程中文版

面向开发人员的 ChatGPT 提示语教程中文版 1. 指南1-1. 提示的指南1-2. 配置1-3. 提示语原则原则 1: 写出清晰而具体的指示技巧 1: 使用分隔符来清楚地表明输入的不同部分技巧 2: 要求提供结构化的输出技巧 3: 要求模型检查条件是否得到满足技巧 4: "少许样本"提示 原…

新魔百盒M304A_增强版2+16G_S905系列_UWE5621DS_卡刷/线刷固件包-当贝桌面

新魔百盒M304A_增强版216G_S905系列_UWE5621DS_卡刷&#xff0f;线刷固件包-当贝桌面 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内…

第三十九章 Unity 图像 (Image) UI

本章节&#xff0c;我们介绍一下“Image”UI元素&#xff0c;首先我们创建一个新场景“SampleScene2.unity”。然后我们点击菜单栏“GameObjec”->“UI”->“Image”&#xff0c;如下所示 我们将其放置到了中间位置&#xff0c;检视面板中的参数如下 默认情况下&#xf…

python基础-内置高阶函数map/reduce/filter函数的使用

一、map Python内置函数&#xff0c;用法及说明如下&#xff1a; class map(object):"""map(func, *iterables) --> map objectMake an iterator that computes the function using arguments fromeach of the iterables. Stops when the shortest iterab…

工控机All In One——篇1,pve安装(必读)

工控机All In One——篇1&#xff0c;pve安装 1、背景 满足家庭一机多用&#xff0c;同时满足软路由&#xff08;主旁路由&#xff09;、远程控制、NAS&#xff08;个人存储&#xff09;等功能 2、准备 硬件 1、J4125工控机 2、一个usb分线器 3、鼠标键盘 4、带HDMI或VGA接…

2022 年全国硕士研究生入学统一考试英语(一)试题

2022年全国硕士研究生入学统一考试英语&#xff08;一&#xff09;试题 SectionⅠUse of English Directions: Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) The idea that plants have…

论文解析-基于 Unity3D 游戏人工智能的研究与应用

1.重写 AgentAction 方法 1.1 重写 AgentAction 方法 这段代码是一个重写了 AgentAction 方法的方法。以下是对每行代码解释&#xff1a; ①public override void AgentAction(float[] vectorAction) 这行代码声明了一个公共的、重写了父类的 AgentAction 方法的方法。它接受…