0
点赞
收藏
分享

微信扫一扫

最大化平均值

小磊z 2022-02-14 阅读 62

```cpp
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 10000+10;
const int INF = 1000000;
int w[maxn],v[maxn];
double y[maxn];
int n,k;

bool C(double d)
{
    for(int i=0; i<n; i++)
    {
        y[i] = v[i] - d * 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;
    }
    printf("%.2f\n",lb);
}
int main()
{
    scanf("%d%d",&n,&k);
    for(int i=0; i<n; i++)
    {
        scanf("%d%d",&w[i],&v[i]);
    }
    solve();
    return 0;
}


举报

相关推荐

0 条评论