1004 p1m2 百度之星(诡异的二分)

传送门

题解:直接二分答案进行搜索,比赛时知道是使用二分做,但是就是做不出来,不是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;
}

猜你喜欢

转载自blog.csdn.net/zhouzi2018/article/details/81608934