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;
}