【二分】[USACO 2010 Feb S]Chocolate Eating

news/2024/10/5 1:36:38/文章来源:https://www.cnblogs.com/peterzh/p/18447544

https://ac.nowcoder.com/acm/contest/22353/E
有的时候50%通不过真的很无助orz

二分查找最小幸福值: 我们希望找出一个最大的 mid,即最小幸福值,使得 Bessie 能够在 d 天内吃完巧克力,并且每天的幸福值都不低于这个 mid。

我们可以通过二分查找的方式来确定这个 mid。mid 的初始范围是 [0, 1e12],因为幸福值可能很大。
每次我们计算出 mid 的值后,使用 check() 函数来验证是否能够在 d 天内满足每天的幸福值都不低于 mid。如果可以,我们尝试增大 mid;如果不行,我们尝试减小 mid。

注意 如果有剩余巧克力,需要分配到最后一天,不能有剩余

  1. 设定二分查找的上下界 low = 0, high = 1e12
  2. 进行二分查找:
    a. 计算 mid = (low + high) / 2
    b. 使用 check(mid) 判断是否可以分配巧克力:
    - 如果可以满足最小幸福值为 mid,更新结果,并尝试更大的 mid(low = mid + 1)
    - 如果不可以满足,尝试更小的 mid(high = mid - 1)
  3. 输出二分查找的结果(最大最小幸福值)
  4. 输出巧克力的分配方案
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;ll n, d;
ll a[50050], happiness[50050], ans[50010];int check(ll mid) {ll i, j, count, sum, tmp[50010];count = sum = 1;happiness[1] = 0;for(i = 1; i <= d; i++) {while(happiness[i] < mid) {if(count > n) return -1;  // 巧克力吃完了,返回 -1tmp[count] = i;  // 记录巧克力被吃掉的天数happiness[i] += a[count++];  // 增加当前天的幸福值}happiness[i + 1] = happiness[i] / 2;  // 下一天的幸福值是前一天的一半}for(i = 1; i < count; i++) ans[i] = tmp[i];  // 记录巧克力的分配天数for(i = count; i <= n; i++) ans[i] = d;  // 剩余巧克力分配到最后一天return 1;
}int main() {cin >> n >> d;for(int i = 1; i <= n; i++) cin >> a[i];ll l = 0, r = 1e12;ll result = 0;// 二分查找寻找最大的最小幸福值while(l <= r) {ll mid = (l + r) >> 1;if(check(mid) == 1) result = mid, l = mid + 1;else r = mid - 1;}cout << result << endl;for(int i = 1; i <= n; i++) cout << ans[i] << endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

财务知识-20个常用的会计分录

财务知识——20个常用的会计分录

工具推荐:搜索和删除Windows上重复文件的神器:AllDup

​ AllDup是一款免费的重复文件查找工具,它能够帮助用户快速识别和管理计算机上的重复文件。这些文件可能包括文本、图片、音乐、视频等多种类型。AllDup使用快速查询算法,可以有效地搜索和定位重复项,从而帮助用户释放硬盘空间,组织文件结构,并提高系统性能。 下载地址:h…

工具推荐:完全免费的电脑 Epub 阅读器软件 Jane Reader

​ Jane Reader是一款现代化的电子书阅读器,支持EPUB格式,旨在提供类似于纸质书籍的阅读体验。它具有简洁、清爽的界面,支持自动多栏、多主题、直排模式等功能,并提供了一系列个性化设置,如自定义边距、行高、字体大小等。Jane Reader还内置了常用字体,如宋体、黑体、仿宋…

工具推荐:开源免费的文件备份恢复工具:Kopia

​ Kopia是一个开源的备份和恢复工具,适用于Windows、macOS和Linux操作系统。它提供了命令行界面(CLI)和图形用户界面(GUI),支持增量备份、客户端端到端加密、数据压缩和重复数据删除等功能。Kopia的设计注重安全性和效率,支持多种存储后端,如本地磁盘、网络文件系统或…

工具推荐:最佳快捷键启动、控制软件:HotkeyP

​HotkeyP是一款功能强大的热键管理软件,它允许用户自定义键盘快捷键来执行各种操作,如打开文件、运行程序、控制系统命令等。软件提供了高度的个性化定制,用户可以根据自己的工作流程和习惯来设置快捷键,从而提高工作效率。此外,HotkeyP还支持宏命令,用户可以通过宏来自…

博客网站搭建

关于我的博客网站搭建过程自定义博客网站搭建教程 搭建效果 浏览网址:https://www.cnblogs.com/Love-XiaoMeng前期准备博客园:你需要在此注册一个账号,同时你需要在博客园右上角开通我的博客然后你需要在博客后台管理网站中完成好相应设置如图,同时你需要注意一定要开启JS权…

FM的正交解调法

1.FM的模拟调制过程 ​ FM信号是一种频率调制信号,其携带的信息保存在其信号的频率中,通过改变载波的频率来实现基带数据的传输。 其函数表达式如下: \[s(t) = A*cos(w_c*t + K_f*\int m(\tau) d\tau) \]其中: A:表示载波幅度。 \(m(\tau)\):表示基带信号。 \(w_c\):表示载…

工具推荐:支持工作流的高颜值 Windows 搜索启动器:Fluent Search

Fluent Search是一款专为Windows 10和Windows 11设计的高效搜索工具,它能够快速查找运行中的应用程序、浏览器标签、书签、文件等,帮助用户无缝切换工作流程。该软件采用了微软提倡的Fluent Design,具有半透明磨砂质感、圆角图形设计、简洁明快的图标和配色,提供了类似于Wi…

工具推荐:免费好用的WebP格式转换工具:AnyWebP

AnyWebP是一个多功能的WebP格式转换工具,它既提供在线服务也有适用于Windows和macOS的离线客户端。该工具能够将WebP图片转换为JPEG、PNG、ICO等常见格式,同时也支持将这些格式的图片转换为WebP格式。AnyWebP特别适合需要在不同平台和设备之间传输图片的用户,尤其是那些需要…

WPS股票价格查询EXCEL表格

第一步在表格内使用公式=GetStockSource(Stock_code)查询股票的即时交易信息,Stock_code表示股票代码;第二步通过公式从Source中提取所需要的数据,可以提取股票名称、价格、涨跌幅、收盘价格、成交额、成交量、换手率等。 公式如下: GetStockSource(Stock_code),查询股票即…

【2024.10.4 闲话】0/99+

当符卡收取100次后,收率显示会从xx/99+变为master,收率master是成为神触第一步呢(笑)。今日推歌:没有。明天可能有。 今日 set:也没有。话说应该没人知道 set 是什么吧,总之不是 std::set。[ARC176E] Max Vector 给你两个长度为 \(N\) 的正整数序列: \(X=(X_1,X_2,\dot…