【long double】E - Bet UVALive - 7901
阿新 • • 發佈:2018-11-06
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; }