#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int n,k,a[10001],x,y;
priority_queue<int>q;
queue<int>q2;
inline int min(int a,int b){
return a<b?a:b;
}
int main(void){
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
q.push(a[i]);
}
while(q.size()>1){
x=q.top();
q.pop();
y=q.top();
q.pop();
q.push((x+y)/k);
}
sort(a,a+n);
for(int i=0;i<n/2;i++){
q2.push(a[i]);
q2.push(a[n-i-1]);
}
while(q2.size()>1){
x=q2.front();
q2.pop();
y=q2.front();
q2.pop();
q2.push((x+y)/k);
}
printf("%d",min(q.top(),q2.front()));
}
按照排序之后一头一尾地找,发现结果均比 2~5 的原结果少 1。
所以,这也是我怀疑的,误差都如此小,请求检查数据。