您的位置:首页 > 运维架构

【POJ】2976 - Dropping tests 二分->最大化平均值

2017-08-25 23:58 573 查看
http://poj.org/problem?id=2976

n场考试中分别答对a_i题,总题数分别为b_i,允许去掉k场考试,求能达到的最高准确率。

最大化平均值模。

取(n-k)场考试,y[i]=a[i]-mid*b[i]。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
using namespace std;

int n,k;
int a[10005],b[10005];

bool ok(double mid){
double y[10005];
for (int i=0;i<n;i++){
y[i]=a[i]-mid*b[i];
}
sort(y,y+n);
double sum=0;
for (int i=0;i<(n-k);i++){
sum+=y[n-i-1];
}
return sum>=0;
}

int main(){

while ((cin >> n >> k)&&(n||k)){
for (int i=0;i<n;i++){
cin >> a[i];
}
for (int i=0;i<n;i++){
cin >> b[i];
}
double l=0,r=1000000005;
for (int i=0;i<100;i++){
double mid=(l+r)/2;
if (ok(mid)) l=mid;
else r=mid;
}
cout << (int)(l*100+0.5) << endl;  //注意精度
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: