题解:直接二分答案进行搜索,比赛时知道是使用二分做,但是就是做不出来,不是t就是wa,完了自己再写,感觉二分太诡异了,好几种板子。
附上代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=300010;
int x[maxn];
int n;
int main()
{
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&x[i]);
}
sort(x,x+n);
int l=x[0],r=x[n-1];
while(r-l>1){
int mid=(l+r)>>1;
long long sl=0,sr=0;
for(int i=0;i<n;i++){
if(x[i]<mid){
sl+=mid-x[i];
}else{
sr+=(x[i]-mid)/2;
}
}
if(sl<=sr){
l=mid;
}else{
r=mid;
}
}
printf("%d\n",l);
}
return 0;
}