链接:
https://odzkskevi.qnssl.com/e4ddab4bbddb4d48602cd7ef31d6c6fa?v=1538205098
题意:
给你每个队的赔率,问最多投多少个队使得只要有一个队赢了,就能赚钱。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
using namespace std;
vector<long double> v;
int main()
{
int t,n;
long double sum;//必须long double
long double a,b;
int cnt=1;
cin>>t;
while(t--)
{
v.clear();
cin>>n;
char c;
sum=(long double) 1.0;//本钱置为单位1
for(int i=1; i<=n; i++)
{
cin>>a>>c>>b;
v.push_back(1.0/(1.0+b/a));//投该队至少多少钱使得如果该队赢刚好回本
}
sort(v.begin(),v.end());//需要投的钱按从小到大排序
int ans=0;
long double allcost=0.0;
for(int i=0; i<v.size(); i++)//一直加,直到超了本钱停
{
allcost+=(v[i]);
if(allcost<sum)//不能取等,相等代表刚好回本,而题目要求赚钱
{
ans++;
}
else
break;
}
printf("Case #%d: %d\n",cnt++,ans);
}
return 0;
}