1. 程式人生 > >poj 2976 Dropping tests (最大化平均值:二分查詢)

poj 2976 Dropping tests (最大化平均值:二分查詢)

#include<iostream> #include<algorithm> #include<stdio.h> #include<math.h> #define inf 0x3f3f3f3f using namespace std; const int max_n=1050; 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;     }     int ans=(int)round(ub*100);     printf("%d\n",ans); } int main() { #ifndef ONLINE_JUDGE    freopen("in.txt","r",stdin); #endif // ONLINE_JUDGE     while(scanf("%d%d",&n,&k)==2)     {         if(!n&&!k)break;         for(int i=0;i<n;i++)scanf("%d",&v[i]);         for(int i=0;i<n;i++)scanf("%d",&w[i]);         k=n-k;         solve();     }     return 0; }