Codeforces Round 898 (Div. 4)E - Building an Aquarium

news/2024/11/14 6:13:14/文章来源:https://www.cnblogs.com/gailixia/p/18541630

E. Building an Aquarium

题目

有一块由 \(n\) 根柱子组成的珊瑚,其中 \(i\) 根柱子高 \(a_i\) 个单位。之后,在珊瑚周围建造一个水族箱,具体如下:

  • 选择一个整数 \(h \geq 1\) --水箱的高度。在水箱两侧建造高度为 \(h\) 的墙壁。
  • 然后,在水箱中注满水,使每一列的高度都是 \(h\) ,除非珊瑚的高度超过 \(h\) ,否则这一列不需要注水。

例如, \(a=[3,1,2,4,6,2,5]\) 和高度为 \(h=4\) ,最终总共需要使用 \(w=8\) 个单位的水,如图所示。

最多可以用 \(x\) 个单位的水来装满水箱,尽可能建造最大的水箱。可以选择的 \(h\) 的最大值是多少?

INPUT

第一行包含一个整数 \(t\) ( \(1 \leq t \leq 10^4\) ) - 测试用例数。

每个测试用例的第一行包含两个正整数 \(n\)\(x\) ( \(1 \leq n \leq 2 \cdot 10^5\) ; \(1 \leq x \leq 10^9\) )--珊瑚的列数和最大水量。

每个测试用例的第二行包含 \(n\) 个空格分隔的整数 \(a_i\) ( \(1 \leq a_i \leq 10^9\) ) - 珊瑚的高度。

所有测试用例中 \(n\) 的总和不超过 \(2 \cdot 10^5\)

OUTPUT

对于每个测试用例,输出一个正整数 \(h\) ( \(h \geq 1\) ) -水箱的最大高度,因此最多需要 \(x\) 个单位的水才能装满水箱

在这些限制条件下, \(h\) 这个值总是存在的

Example Input

5
7 9
3 1 2 4 6 2 5
3 10
1 1 1
4 1
1 4 3 4
6 1984
2 6 5 9 1 8
1 1000000000
1

Example Output

4
4
2
335
1000000001

Note

第一个测试案例如语句所示。在 \(h=4\) 的情况下,我们需要 \(8\) 个单位的水,但如果 \(h\) 增加到 \(5\) ,我们需要 \(13\) 个单位的水,这比 \(x=9\) 多。因此, \(h=4\) 是最佳方案。

在第二个测试案例中,我们可以选择 \(h=4\) ,并在每列中添加 \(3\) 个单位,总共使用 \(9\) 个单位的水。可以证明这是最佳方案。

在第三个测试案例中,我们可以选择 \(h=2\) ,并用掉所有的水,因此这是最优方案。

[!NOTE]

二分法伪代码:

[!TIP]

对数组a和整数x进行无限次操作,每次操作可以对数组a中任意一个数进行加法,加数的总和不超过x,求整个数组最小值的最大值

找到具有一定上限的最大高度→二元搜索

这个和砍树的思路是一样的,代码基本上可以照搬,但是要注意初始值

#include <bits/stdc++.h>using namespace std;int main() 
{int t;scanf("%d", &t);for (int i = 1; i <= t; i++) {int n;long long x;scanf("%d %lld", &n, &x);long long a[n];for (int i = 0; i < n; i++) {scanf("%lld", &a[i]);}long long l = 0;long long r = 2000000000 + 10;while (l < r) {long long mid = l + r + 1 >> 1;//long long mid = l + (r - l + 1) / 2;long long sum = 0;for (int i = 0; i < n; i++)if (mid >= a[i]) {sum += mid - a[i];}if (sum <= x) {l = mid;} else {r = mid - 1;}}printf("%lld\n", l);}return 0;
}

[!TIP]

也可以用用sort排序再从后往前查找的方法,注意点同上(WA)

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main() {int t;cin >> t;for (int i = 1; i <= t; i++) {int n, x;cin >> n >> x;vector<long long> a(n + 1),s(n + 1);a[n] = 2e9+10;for (int j = 0; j < n; j++) {cin >> a[j];}// 对数组a进行排序sort(a.begin(), a.end());s[0] = a[0];for (int k = 1; k <= n; k++) {s[k] = s[k - 1] + a[k];}int fumo = 0; for (int l = 1; l <= n; l++){long long sum = (l + 1) * a[l] - s[l];if (sum > x) break;else fumo = l;}long long h = a[fumo];long long baka = x - ((fumo + 1) * a[fumo] - s[fumo]);h += baka / (fumo + 1);cout << h << '\n';}return 0;
}

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

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

相关文章

Oracle数据库归档模式的开启和关闭

一、Oracle环境Oracle服务器:oracle11g oracle版本:11.2.0.1.0 操作系统版本:Red Hat Enterprise Linux Server release 7.6 (Maipo)二、归档模式介绍 oracle是款高安全性的数据库,刚安装好的数据库一般没有开启归档模式,我们需要开启归档模式,特别是业务数据库,开…

易经八卦,

在易经中,我们用—表示阳;--表示阴;在计算机中, 用0表示--,1表示—; 两爻组合得到 太阳, 太阴, 少阳, 少阴, 在计算机中, 分别用11,00,10,01表示 三爻组合, 得到八卦, 乾、兑、离、震、巽、坎、艮、坤, 分别用111,110,101......001,000表示 两个八卦, 上下组合成64卦, 乾1111…

NVM :用于管理 Node.js 版本的工具

在日常的开发工作中,我们往往会遇到需要在同一台机器上同时管理多个版本的 Node.js 的情况。为了解决这个问题,我一个同事推荐了NVM(Node Version Manager)。,可以方便地在不同的项目之间切换 Node.js 版本,同时保证开发环境的一致性。本文将介绍 NVM 的基本概念、window…

Z-library数字图书馆镜像地址/官网入口及客户端app (长期更新)

Z-Library是一家电子图书馆,被誉为全球最大的科学图书和学术文献免费资源之一。它创办于2009年,截至2022年10月1日,已收录超过1129万本图书和8483万篇学术文章。从各种知名文学著作,理工学科,人文艺术、到学术论文等应有尽有!支持PDF、epub、mobi等多种格式图书资源下载绝…

Lec 03 系统指令集架构

Lec 03 系统指令集架构 (参考来源:上海交通大学并行与分布式系统研究所+操作系统课程ppt) Creative Commons Attribution 4.0 License Contents 3.1 回顾:特权级的必要性一台计算机上同时运行多个应用程序,如何保证不同应用间的隔离?如果所有的应用均能完全控制硬件计算资源…

TypeScript语法细节

联合类型使用联合类型

lec 02 arm汇编语言基础

Lecture 02: ARM 汇编基础 Contents为什么学习ARM/ISA汇编 从C到汇编 理解arm汇编 理解机器执行1 为什么学习汇编和指令集架构? 1.令人困惑的应用表现2.指令集架构ISA(Instruction Set Architecture)CPU向软件(应用程序和操作系统)提供的接口。 理解软件在CPU上的运行(OS设计,…

看雪看雪看雪

看雪看雪看雪[攻防世界]看雪看雪看雪 分析 得到一个rar文件,里面有一张jpg 南方孩子羡慕按照图片隐写思路:属性 010editor(隐藏文件分离,宽高) stegslove 等解题 按照刚才思路,没有什么发现 回头看看题目“看雪看雪看雪”,好像有个东西叫雪隐写 后面看wp,其实属性里面有…

cf round 898 (div.4) E

建造水族馆 题目描述 你喜欢鱼,所以你决定建造一个水族馆。你有一块由 n 根柱子组成的珊瑚,其中 i 根柱子高 ai 个单位。之后,你将在珊瑚周围建造一个水族箱,具体如下:选择一个整数 h --水箱的高度。在水箱两侧建造高度为 h 的墙壁。 然后,在水箱中注满水,使每一列的高度…

【日记】居然把今天的应酬逃掉了(668 字)

正文今天副行长回来了。本来以为今晚又要应酬,结果跑掉了。嘿嘿。有一个企业的董事长听说他回来了,所以嚷嚷着要请客。而客户请吃饭的对象又只有客户经理,所以我和柜面主管两个人就溜了。办公室的人也没去。不过明天是全行内部性质的,估计溜不了了。能逃一次是一次吧,嘿嘿…