poj2976

来源:互联网 发布:黑之宣告知乎 编辑:程序博客网 时间:2024/06/10 16:47

链接:点击打开链接

题意;有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;}


 

0 0
原创粉丝点击