版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/imzxww/article/details/81635406
http://acm.hdu.edu.cn/showproblem.php?pid=6383
思路:
直接二分枚举答案,注意全部开long long
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=998244353;
const int maxn=3e5+10;
const ll inf=1e18;
ll a[maxn];
ll n;
bool findx(ll x)
{
ll jf=0,ad=0;
for(ll i=1;i<=n;i++)
{
if(a[i]<=x)
{
ad+=x-a[i];
}
else
{
jf+=(a[i]-x)/2;
}
}
if(ad>jf)
{
return false;
}
return true;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%lld",&n);
ll sum=0;
for(ll i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
sum+=a[i];
}
ll l=0;
ll r=sum/n;
ll mid;
while(l<r)
{
mid=(l+r+1)/2;
if(findx(mid))
{
l=mid;
}
else
{
r=mid-1;
}
}
printf("%lld\n",l);
}
return 0;
}