1. 程式人生 > >最大化平均值(二分查詢)

最大化平均值(二分查詢)

int n,k; int w[max_n]; int v[max_n]; double y[max_n]; bool c(double x) {     for(int i=0;i<n;i++)         y[i]=v[i]-x*w[i];     sort(y,y+n);          double sum=0;     for(int i=0;i<k;i++)     {         sum+=y[n-i-1];     }     return sum>=0; } void solve() {     double lb=0,ub=inf;     for(int i=0;i<100;i++)     {         double mid=(lb+ub)/2;         if(c(mid))lb=mid;         else ub=mid;     }     printf("%.2f\n",ub); }