玄学事件,求解释
  • 板块灌水区
  • 楼主Xu_Jinyi_2011
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/12/28 09:56
  • 上次更新2024/12/28 14:13:03
查看原帖
玄学事件,求解释
1136033
Xu_Jinyi_2011楼主2024/12/28 09:56

rt

#include <bits/stdc++.h>
using namespace std;
int n, k;
long long ans;
struct Node{
	long long w, h;
	bool operator < (const Node &a) const {
		return w != a.w ? w > a.w : h > a.h;
	}
	Node(long long a, long long b): w(a), h(b) {}
};
int main() {
	cin >> n >> k;
	priority_queue<Node>heap;
	for (int i = 0; i < n; i ++) {
		long long a;
		cin >> a;
		heap.push(Node(a, 0));
	}
//	for (int i = 0; i < (n - 1)%(k - 1); i ++) heap.push(Node(0, 0)); //这一行不行
	while ((n - 1)%(k - 1)) {
		heap.push(Node(0, 0));
		n ++;
	}//这四行可以
	while (heap.size() >= k) {
		long long w = 0, h = -1;
		for (int i = 0; i < k; i ++) {
			Node top = heap.top(); heap.pop();
			h = max(h, top.h);
			w += top.w;
		}
		ans += w;
		heap.push(Node(w, h + 1));
	}
	cout << ans << '\n' << heap.top().h;
	return 0;
}
2024/12/28 09:56
加载中...