首页 分享 蓝桥杯——可凑成的最大花束数

蓝桥杯——可凑成的最大花束数

来源:花匠小妙招 时间:2026-03-01 17:04

蓝桥杯——可凑成的最大花束数

最新推荐文章于 2026-02-25 19:45:54 发布

原创 于 2024-12-27 17:47:02 发布 · 317 阅读

· 1

· 0 ·

CC 4.0 BY-SA版权

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

问题描述

情人节到了,妮妮学姐的追求者实在太多了,她一共有 n 个追求者,第 i 个追求者赠送了 ai​ 朵颜色相同的花朵。每个追求者赠送的花朵颜色都不同。为了卖掉这些花并将所得款项捐赠给希望小学,妮妮学姐决定将 k 朵颜色不同的花朵打包成一个花束。请问她最多可以打包成多少个花束?

输入格式

第一行输入两个整数 n 和 k,分别表示妮妮学姐的追求者数量和打包需要的花朵数。

第二行输入 n 个整数 ai​,表示每个追求者赠送的花朵数量。

数据范围保证:1≤n,k≤2×1051≤n,k≤2×105,1≤ai≤1091≤ai​≤109。

输出格式

输出一个整数表示妮妮学姐最多可以打包成多少个花束。

样例输入

2 2

5 6

样例输出

5 说明

我们需要 2 朵不同颜色花朵打包成一个花束。我们有 5 朵某种颜色的花和 6 朵另一种颜色的花。我们可以通过每个花束中取两个不同颜色的花朵来打包 5 个花束。第二个追求者送的花会剩下一朵,但我们无法使用它来打包一个花束。这是我们能做到的最多的,所以答案是 5 。

代码如下:

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const int maxn = 2e5 + 9;

ll a[maxn];

ll check(ll x, int n) {

ll res = 0;

for (int i = 1; i <= n; i++){

res += min(a[i], x);

}

return res;

}

int main()

{

ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

int n, k; cin >> n >> k;

for (int i = 1; i <= n; i++) cin >> a[i];

sort(a + 1, a + n + 1);

ll l = 0, r = 2e32;

while (l + 1 < r) { //二分答案

ll mid = (l + r) / 2;

if (check(mid, n) / mid >= k) l = mid;

else r = mid;

}

cout << l;

return 0;

}

相关知识

蓝桥杯大赛报名指南
第十届蓝桥杯答案python
AI:互联网程序设计竞赛之蓝桥杯大赛的简介、奖项设置、大赛内容以及蓝桥杯与ACM(ICPC)的四个维度对比之详细攻略
蓝桥杯:生日蜡烛
第十六届蓝桥杯大赛报名通知
关于第十六届蓝桥杯大赛的报名及培训通知
计算机学院教师积极参加第十六届蓝桥杯大赛省赛师资培训会
蓝桥杯国赛每日一题:巧克力(贪心,堆)
【竞赛获奖】第十二届蓝桥杯全国高校视觉艺术设计赛全国选拔赛获奖名单揭晓 美院学子获得四个奖项
蓝桥杯练习系统之基础训练Java版(2

网址: 蓝桥杯——可凑成的最大花束数 https://www.huajiangbk.com/newsview2576611.html

所属分类:花卉
上一篇: python打包技巧:彻底解决p
下一篇: 习题加餐5 可凑成的最大花束数

推荐分享