uva 7901
https://vjudge.net/problem/UVALive-7901
转自https://blog.csdn.net/summonlight/article/details/56673544
记对第i个赌局下注ci,则题意就是对于答案集合S中的每个i都有
该式对 i 求和可得 ∑i∈Siaiai+bi<1接下来排个序贪个心
1.题目说a,b最多3位小数,但是最后卡精度,所以a,b要乘1000,然后用long double处理
(long double 输出用 %Lf )
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100 + 5;
long double c[maxn];
int main()
{
int T;scanf("%d",&T);
int n;
for (int cn = 1; cn <= T; cn ++) {
scanf("%d",&n);
long double la,lb;
double a,b;
for (int i = 0; i < n; i ++) {
scanf("%lf%*c%lf",&a,&b);
la = a * 1000;
lb = b * 1000;
c[i] = la / (la + lb);
}
sort(c,c + n);
long double ans = 0;
int sz = 0;
//for(int i = 0;i < n;i ++) printf("%Lf ",c[i]);printf("\n");
long double one = 1.0;
for (int i = 0; i < n; i ++) {
ans += c[i];
if(ans < one) sz ++;
else break;
}
printf("Case #%d: %d\n",cn,sz);
}
return 0;
}