贪心: 每次对
退出条件:
最少的牌进行+1 (使用小跟堆可以快速得到元素最小值)退出条件:
m == 0|| 超过 $b_i$ 次#include <cstdio>
#include <vector>
#include <queue>
#include <tuple>
using namespace std;
int main() {
int n, m;
scanf("%d %d", &n, &m);
vector<int> brr(n);
priority_queue<tuple<int, int>, vector<tuple<int, int>>, greater<tuple<int, int>>> pq; // 数量 - 索引
for (int i = 0, j; i < n; ++i) {
scanf("%d", &j);
pq.push(make_tuple(j, i));
}
for (int i = 0; i < n; ++i) {
scanf("%d", &brr[i]);
}
while (m--) {
int cnt, i;
tie(cnt, i) = pq.top();
pq.pop();
if (--brr[i] < 0 || !m) {
printf("%d\n", cnt);
return 0;
}
pq.push(make_tuple(++cnt, i));
}
return 0;
}
1 回复
0 转发
1 喜欢
3 阅读



