问题
1,小强有n个养鸡场,弟i个养鸡场初始有a[i]只小鸡。与其他养鸡场不同的是,他的养鸡场每天增加k只小鸡,小强每天结束都会在数量最多的养鸡场里卖掉一半的小鸡,假如一个养鸡场有x只鸡,则卖出后只剩下x/2(向下取整)只鸡。问m天后小强的n个养鸡场一共多少只小鸡?
输入
第一行输入三个int类型n,m,k(1 <= n,m,k <= 10^6) 第二行输入n个正整数,表示n个养鸡场初始鸡的个数
输出
输出 输出一个整数表示鸡的总数
输入示例
3 3 100
100 200 400
输出示例
925
思路:优先队列,时间复杂度O(mlogn)
完整代码实现
//#include<bits/stdc++.h>
#include <queue>
#include<iostream>
using namespace std;
typedef long long ll;
int main() {
int n, m, k, t;
ll base(0), sum(0);
scanf("%d%d%d", &n, &m, &k);
priority_queue<int> heap;//默认大根堆
for (int i = 0; i < n; i++) {
scanf("%d", &t);
heap.emplace(t);
sum += t;
}
for (int i = 0; i < m; i++) {
base += k;
t = heap.top() + base;
int d = (t + 1) / 2;
heap.pop();
heap.emplace(t - d - base);
sum -= d;
}
printf("%lld\n", base * n + sum);
}