Bardisk 和 Barisore 喜欢玩 Minecraft。这天 Bardisk 收集了 n种建筑方块,第i 种建筑方块有 u[i] 个,Bardisk 想把这些方块铺成一个宽度为k 的长方形,起初他把相似的方块铺在一起,但是 Barisore 嫌太丑了,她要求每行(即沿着宽度的方向)的 k个方块种类都是不同的。 Bardisk 是建筑白痴,所以他想问问聪明的你,使用现有的材料,他最多可以按这样的要求铺多少行? 输入格式 第一行两个正整数 ,意义如题。 第二行 个正整数,表示序列 ,意义如题。 输出格式 输出一个正整数,表示答案。 样例 输入 6 5 1 9 1 9 8 6 输出 2 数据范围与提示 本题考察贪心和二分。 样例解释 一共可以堆两行,第一行选择第 1、2、4、5、6 种方块各一个,第二行选择第 2、3、4、5、6 种方块各一个,这之后只剩下四种方块了,无法堆出新的一行,故答案为 。 c++代码
时间: 2024-04-09 11:28:20 浏览: 94
游戏,俄罗斯方块普通板,C#实现附源码,有预览小窗口,可以自动升级,计算积分、手速、消除的行数,可以设置按键,左右控制及变形
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> blocks(n);
for (int i = 0; i < n; i++) {
cin >> blocks[i];
}
sort(blocks.begin(), blocks.end(), greater<int>());
int ans = 0;
int rows = 0;
for (int i = 0; i < n; i++) {
rows += blocks[i] / k;
if (rows >= k) {
ans += k;
rows -= k;
}
else {
ans += rows;
rows = 0;
}
}
cout << ans << endl;
return 0;
}
```
阅读全文