蓝桥杯——可凑成的最大花束数
蓝桥杯——可凑成的最大花束数
最新推荐文章于 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://m.huajiangbk.com/newsview2576611.html
| 上一篇: python打包技巧:彻底解决p... | 下一篇: 习题加餐5 可凑成的最大花束数 |



