这个题A的莫名其妙,因为没想到怎么做就直接按着题目给出的提示模拟
结果莫名其妙的A了
每次拉K个人,把所有人停放在能到达的最低层,再回到最低层拉人,重复这个过程即可
代码如下:
#include <bits/stdc++.h>
#define MAXN 10010
using namespace std;
priority_queue<int, vector<int>, greater<int> > q;
int b[MAXN];
int main(void) {
int n, k, a;
scanf("%d%d", &n, &k);
for(int i=1; i<=n; ++i) {
scanf("%d", &a);
q.push(a);
}
int flag = 0;
int ans = 0;
while(!q.empty()) {
int tmp = q.top();
q.pop();
ans += 2*tmp-2;
if(q.empty())
break;
for(int i=1; i<k; ++i) {
int res = q.top();
q.pop();
b[i] = res-tmp+1;
flag = i;
if(q.empty()) {
break;
}
}
for(int i=1; i<=flag; ++i) {
if(b[i] > 0)
q.push(b[i]);
}
}
printf("%d\n", ans);
return 0;
}