您的位置:首页 > 其它

poj2976

2015-12-12 17:58 337 查看
链接:点击打开链接

题意;有n场考试,给出每场答对的题数a和这场一共有几道题b,求去掉k场考试后,公式

.的最大值

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
double a[1005],b[1005],v[1005];
int n,k;
bool judge(double d){               //二分最大化平均值
int i;
double sum;
sum=0;
for(i=0;i<n;i++)
v[i]=a[i]-d*b[i];               //将a[i]/b[i]>=d转换为a[i]-d*b[i]>=0
sort(v,v+n);
for(i=0;i<n-k;i++)              //选n-k个最大的
sum+=v[n-i-1];
return sum>=0;
}
int main(){
int i,j;
double l,r,mid,ans;
while(scanf("%d%d",&n,&k)!=EOF&&(n||k)){
for(i=0;i<n;i++)
scanf("%lf",&a[i]);
for(i=0;i<n;i++)
scanf("%lf",&b[i]);
l=0,r=1;
for(i=0;i<100;i++){
mid=(l+r)/2;
if(judge(mid)){
//                ans=mid;          //不能加上这句,可能是因为精度不够使得
l=mid;              //ans的值和l并不相等
}
else
r=mid;
}
printf("%.0lf\n",100*l);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: