二分答案----

二分答案 - 题目详情 - HydroOJ

问题描述

给定一个由n个数构成的序列a,你可以进行k次操作,每次操作可以选择一个数字,将其+1,问k次操作以后,希望序列里面的最小值最大。问这个值是多少。

输入格式

第一行输入两个正整数n,k。(1≤n≤105,1≤k≤1013)

第二行输入n个正整数,表示序列a。(1≤ai​≤106)

输出格式

输出最大的最小值

样例输入

5 10

1 4 2 6 8

Copy

样例输出

5

Copy

思路:

枚举最小值的最大值,然后判断是否可以成功,也就是使用操作次数是否在k范围内。

代码:

复制代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; 
const ll N = 1e5 + 10;
ll n, k;
ll a[N];

bool check(ll mid, ll k) 
{
    ll sum = 0;
    for (ll i = 1; i <= n; i++) 
	{
        if (a[i] < mid) 
		{
            sum += mid - a[i];
        }
    }
    return sum <= k;
}

int main() {
    cin >> n >> k;
    ll min_val = LLONG_MAX;
    for (ll i = 1; i <= n; i++) 
	{
        cin >> a[i];
        min_val = min(min_val, a[i]);
    }
    sort(a + 1, a + n + 1);
    ll l = min_val, r = 1e6 + k;
    while (l + 1 != r) 
	{
        ll mid = (l + r) / 2;
        if (check(mid, k)) 
		{
            l = mid;
        } 
		else 
		{
            r = mid;
        }
    }
    cout << l;
    return 0;
}    
相关推荐
hansang_IR11 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集
Tisfy13 小时前
LeetCode 3731.找出缺失的元素:哈希 / 排序
算法·leetcode·哈希算法·排序·哈希表
lucas_AI13 小时前
Q-CueGraph:你的多模态大模型会 zoom,但真的知道该看哪儿吗?
人工智能·算法
kaixin_啊啊14 小时前
test_机器学习算法学习
学习·算法·机器学习
liulilittle14 小时前
MOE路由:路由(logits: top-k/8)
c++·人工智能·算法·机器学习·llm
旖旎夜光14 小时前
LeetCode 11:盛最多水的容器(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
一只齐刘海的猫14 小时前
【Leetcode】乘积最大子数组
算法·leetcode·职场和发展
余生皆假期-15 小时前
傅里叶变换和拉普拉斯变换
人工智能·算法·机器学习
数模竞赛Paid answer16 小时前
2026年五一杯数学建模C题边坡预警问题求解全过程文档及程序
算法·数学建模·五一杯
hold?fish:palm16 小时前
20 旋转图像
c++·算法·leetcode