首页 > 其他分享 >整数二分—建造水族馆

整数二分—建造水族馆

时间:2024-11-12 22:57:22浏览次数:1  
标签:二分 int 建造 mid long 水箱 测试用例 整数 水族馆

建造水族馆

每次测试时限:2 秒
每次测试的内存限制:256 兆字节
输入:标准输入
输出:标准输出

题目:

你喜欢养鱼,所以你决定建造一个水族馆。你有一块由n根柱子组成的珊瑚,其中i根柱子高 ai个单位。之后,你将在珊瑚周围建造一个水族箱,具体如下:

  • 选取一个整数h>=1--水箱的高度。在水箱两侧建造高度为h的墙壁。
  • 然后,在水箱中注满水,使每一列的高度为 h ,除非珊瑚的高度超过h,否则这一列不需要注水。
    例如,a=[3,1,2,4,6,2,5]和高度为h=4,您将总共使用w=8个单位的水,如图所示。

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

输入

第一行包含一个整数 t( 1<=t<=10^4) - 测试用例数。
每个测试用例的第一行包含两个正整数 n和x( 1<=n<=2*10^5 ; 1 <=x<=10^9 )--珊瑚的列数和最大水量。
每个测试用例的第二行包含n个空格分隔的整数 ai( 1<=ai<=10^9) 珊瑚的高度。
所有测试用例中n的总和不超过 2X10^5。

输出

对于每个测试用例,输出一个正整数 h(H>=1 ) - 水箱的最大高度,因此最多需要 x个单位的水才能装满水箱。
我们已经证明,在这些限制条件下,h这个值总是存在的。

注意

第一个测试案例如图所示。在 h=4 的情况下,我们需要8个单位的水,但如果 h 增加到 5,我们需要 13个单位的水,比 x=9多。因此h=4 是最佳方案。
在第二个测试案例中,我们可以选择 h=4,并在每列中添加 3个单位,总共使用 9个单位的水。可以证明这是最佳方案。
在第三个测试案例中,我们可以选择 h=2,并使用所有的水,因此这是最佳方案。

代码实现

using namespace std;
const int N = 2e5 + 10;
int t;
int n, x;
int a[N];
bool check(long long mid)
{
    long long ant = 0;
    for (int i = 1; i <= n; i++)
    {
        if (a[i] < mid)
            ant += mid - a[i];
        if (ant > x)
            return false;
    }
    return true;
}
void cheng()
    {
    cin >> n >> x;
    for (int i = 1; i <= n; i++)cin >> a[i];
    int l = 1, r = 2e9 + 10;
    while (l < r)
    {
        long long mid = r + l + 1;
        if (check(mid))l = mid;
        else r = mid - 1;
    }
    cout << l << "\n";
}
int main()
{
    while (t--)
        cheng();
    cin >> t;
    return 0;
}

标签:二分,int,建造,mid,long,水箱,测试用例,整数,水族馆
From: https://www.cnblogs.com/Xuxuan18/p/18542831

相关文章

  • PTA-C语言-数组-字符串转换成十进制整数
    题目:输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。输入格式:输入在一行中给出一个以#结束的非空字符串。输出格式:......
  • 整数二分
    洛谷p1873砍树题目描述:伐木工人Mirko需要砍M米长的木材。对Mirko来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一般砍伐森林。不过,Mirko只被允许砍伐一排树。Mirko的伐木机工作流程如下:Mirko设置一个高度参数H(米),伐木机升起一个巨大的锯片到高度H,并锯掉......
  • 【算法】【优选算法】二分查找算法(上)
    目录一、二分查找简介1.1朴素二分模板1.2查找区间左端点模版1.3查找区间右端点模版二、leetcode704.⼆分查找2.1二分查找2.2暴力枚举三、Leetcode34.在排序数组中查找元素的第⼀个和最后⼀个位置3.1二分查找3.2暴力枚举四、35.搜索插⼊位置4.1二分查找4.2......
  • 二分法查找
    二分查找/*折半查找,二分查找*///已经排好序的数组中进行查询#include<stdio.h>intmain(){ intlow,high,mid,userInput;//highlowmid记录的是数组下标 intflag=0;//记录能否找到 inta[10]={12,14,21,35,48,57,69,78,89,99};//二分查找的前提:已经有序 low=0......
  • 二分答案模板
    本篇主要介绍二分答案的几个模板1.常用二分模板整数二分模板1将区间划分为[l,mid]和[mid+1,r]则对应的边界更新操作为r=mid,和l=mid+1;中点mid不要+1(相当于向下取整);//整数二分模板1intbsearch_1(intl,intr){while(l<r){......
  • 【论文笔记】基于不完整数据的鲁棒多模态情感分析
    背景在现实世界的多模态情感检测中,由于存在大量的不完整的数据,影响了模型在判断情感时的准确性和鲁棒性,为了解决这一问题,本文提出了一个出了一种新颖的网络结构——Language-dominatedNoise-resistantLearningNetwork(LNLN),旨在解决数据不完整性问题,在MSA中语言模态通常包......
  • LeetCode 13[罗马数字转整数]
    题目链接LeetCode13[罗马数字转整数]详情实例提示题解思路遍历罗马字符串如果元素是除了'I'、'X'、'C'以外的罗马字,即是'V'、'L'、'D'、'M'等元素,则直接加上罗马字对应的整型数字如果元素是'I'则分以下几种情况:此元素为最后一个元素,则直接加上罗马字对应的......
  • 知识点扫盲:二分答案
    本条博客以及本系列用于记录算法学习中不熟悉或少见的知识点一.关于二分答案的来源和应用由于本大一==蒟蒻==没有经过系统性的学习,在一场牛客小白月赛中首次听说二分答案这一操作,十分震惊其效率与作用,遂写此篇来记录关于二分答案有关的概念[二分法]"https://oi-wiki.or......
  • C / C++ 整数类型转换规则与示例
    在C语言编程中,不同类型之间的转换是非常常见的事情,尤其是整数类型之间的转换,比如从较短类型到较长类型的转换、从有符号类型到无符号类型的转换等。这些转换看似简单,但如果不理解它们背后的机制,可能会导致一些隐蔽的bug。本文将深入探讨整数类型转换的规则和过程,并通过实例帮助大......
  • ABC372D ABC379F 题解 单调栈二分
    ABC372DABC379F题解单调栈二分一直觉得AT上面学到的东西比CF要多一些,无意捧一踩一,但可能是我太菜的原因,毕竟ABC的题目普遍要比Div.2简单一些。好多次碰到这个单调栈里面二分的trick了,所以写一篇来总结一下。ABC372D形象地给定一系列Buildings的高度\(h\),保证每个......