• 【二分查找-最大化平均值】POJ2976


    【题目大意】

    给出n组ai和bi,去掉k个使得a的总和除以b的总和最大。

    【思路】

    也就是取(n-k)个数,最大化平均值,见《挑战程序设计竞赛》P144,最后公式为c(x)=((ai-x*bi)从大到小排列的前(n-k)个的和不小于0)。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 const int MAXN=10000+50;
     8 const int INF=1000000+50;
     9 int n,k;
    10 int a[MAXN],b[MAXN];
    11 
    12 int c(double x)
    13 {
    14     double y[MAXN];
    15     for (int i=0;i<n;i++) y[i]=a[i]-x*b[i];
    16     sort(y,y+n);
    17     double sum=0;
    18     for (int i=0;i<(n-k);i++) sum+=y[n-i-1];
    19     return sum>=0;
    20 }
    21 
    22 void submain()
    23 {
    24     double lb=0,ub=INF;
    25     for (int i=0;i<100;i++)
    26     {
    27         double mid=(lb+ub)/2;
    28         if (c(mid)) lb=mid;
    29                else ub=mid;
    30     }
    31     printf("%.0f
    ",lb*100);
    32 }
    33 
    34 int main()
    35 {
    36    while (scanf("%d%d",&n,&k))
    37    {
    38         if (n==k && k==0) break;
    39         for (int i=0;i<n;i++) scanf("%d",&a[i]);
    40         for (int i=0;i<n;i++) scanf("%d",&b[i]);
    41         submain();
    42    }
    43    return 0; 
    44 }
  • 相关阅读:
    关于串联匹配电阻其作用:
    上下拉电阻
    RS232
    常用硬件介绍
    VGA
    JTAG
    [生活]-理财入门
    [Camera] color shading的产生
    [camere] AWB老算法
    Python基础语法知识
  • 原文地址:https://www.cnblogs.com/iiyiyi/p/6057633.html
Copyright © 2020-2023  润新知