【long double】E - Bet UVALive - 7901

https://vjudge.net/contest/262327#problem/E

假设总共bet的钱为X

那么每个选择的队伍bet的钱栈总钱数的P[i]

所以如果要可以选必须得让P[i]*X*(1+b[i]/a[i])>=X

==> P[i]>=A[i]/(A[i]+B[i])

算出所有P,从小到大排

到最大到第几个队伍sigma P<=1

一定要用double

#include <bits/stdc++.h>
using namespace std;
const long double eps=1e-15;
long double c[105];

int main()
{
    int T,cas=0;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            double a,b;
            scanf("%lf",&a);
            getchar();
            scanf("%lf",&b);
            long double la,lb;
            la=a*1000,lb=b*1000;
            c[i]=la/(la+lb);
        }
        sort(c+1,c+n+1);
        long double p=0;
        int ans=0;
        double one=1.000;
        for(int i=1;i<=n;i++)
        {
            p+=c[i];
            if(p<one) ans++;
            else break;
        }
        printf("Case #%d: %d\n",++cas,ans);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41037114/article/details/83089839
今日推荐