【推导】【贪心】【高精度】Gym - 101194E - Bet
题意:每个队伍有个赔率pi,如果你往他身上押x元,它赢了,那么你得到x+(1/pi)x元,否则你一分都得不到。问你最多选几支队伍去押,使得存在一种押的方案,不论你押的那几支队伍谁赢,你都能赚得到钱。
设你往第i支队伍上押ai元,不选的视作零元。
首先可以证明,不论你持有多少钱,不影响最后是否有解;是否有解只跟你往各个队伍上押的比例有关。所以不妨设你持有的钱为常数A。
于是有不等式ai*(1+1/pi)>=A,大胆猜测等号成立时,有最极限的解。于是ai=A/(1+1/pi)。
也就是你往第i支队伍身上押的钱数,占你的总钱数的1/(1+1/pi)。
于是把所有队伍按照1/(1+1/pi)从小到大排序,依次尽量选择即可。
注意!由于精度爆炸,所以要用高精度做分数运算。
import java.util.*;
import java.io.*;
import java.math.*; public class Main{
public static void main(String[] argc){
BigInteger[] A=new BigInteger[105];
BigInteger[] B=new BigInteger[105];
double[] C=new double[105];
int[] vis=new int[105];
String S;
char[] s=new char[105];
Scanner sc = new Scanner (new BufferedInputStream(System.in));
int T=sc.nextInt();
for(int zu=1;zu<=T;++zu){
System.out.printf("Case #%d: ",zu);
int n=sc.nextInt();
for(int i=1;i<=n;++i){
long tA=0,tB=0;
S=sc.next();
int len=S.length();
s=S.toCharArray();
int colon=0;
for(int j=0;j<len;++j){
if(s[j]==':'){
colon=j;
break;
}
}
int pos1=colon-1;
for(int j=0;j<colon;++j){
if(s[j]=='.'){
pos1=j;
}
else{
tA=tA*10+s[j]-'0';
}
}
int pos2=len-1;
for(int j=colon+1;j<len;++j){
if(s[j]=='.'){
pos2=j;
}
else{
tB=tB*10+s[j]-'0';
}
}
for(int j=1;j<=colon-pos1-len+pos2;++j){
tB*=10l;
}
for(int j=1;j<=len-pos2-colon+pos1;++j){
tA*=10l;
}
A[i]=BigInteger.valueOf(tA);
B[i]=A[i].add(BigInteger.valueOf(tB));
C[i]=(double)tA/((double)tA+(double)tB);
}
BigInteger sumA=BigInteger.ZERO,sumB=BigInteger.ONE;
for(int i=1;i<=n;++i){
vis[i]=0;
}
int flag=0;
for(int i=1;i<=n;++i){
double minn=2000000000.0;
int id=0;
for(int j=1;j<=n;++j)if(vis[j]==0){
if(C[j]<minn){
minn=C[j];
id=j;
}
}
vis[id]=1;
sumA=sumA.multiply(B[id]).add(sumB.multiply(A[id]));
sumB=sumB.multiply(B[id]);
if(sumA.compareTo(sumB)>=0){
System.out.println(i-1);
flag=1;
break;
}
}
if(flag==0){
System.out.println(n);
}
// for(int i=1;i<=n;++i){
// System.out.print(A[i]);
// System.out.printf(" ");
// System.out.println(B[i]);
// }
}
sc.close();
}
}
【推导】【贪心】【高精度】Gym - 101194E - Bet的更多相关文章
- POJ 2325 Persistent Numbers#贪心+高精度除法
(- ̄▽ ̄)-* 这道题涉及高精度除法,模板如下: ]; ];//存储进行高精度除法的数据 bool bignum_div(int x) { ,num=; ;s[i];i++) { num=num*+ ...
- [NOIp2012] 国王游戏(排序 + 贪心 + 高精度)
题意 给你两个长为 \(n+1\) 的数组 \(a,b\) ,你需要定义一个顺序 \(p\) (\(p_0\) 永远为 \(0\)) 能够最小化 \[ \max_{i=1}^{n} \frac{\pr ...
- P1080 国王游戏 贪心 高精度
题目描述 恰逢 HH国国庆,国王邀请nn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 nn 位大臣排成一排,国王站在队伍的 ...
- luogu1080 国王游戏(贪心+高精度)
貌似这道题是碰巧蒙对了贪心的方式..就是把ai*bi越小的放在越前面 (不过也符合直觉) 然后统计答案需要用高精度,然后就调了一年 #include<cstdio> #include< ...
- luoguP1080 国王游戏 (贪心+高精度)
题目链接:https://www.luogu.org/problemnew/show/P1080 参考:https://www.luogu.org/problemnew/solution/P1080 ...
- 【NOIP2012提高组】国王游戏 贪心 + 高精度
题目分析 题目答案不具有单调性,所以不可以二分,转而思考贪心.因为无法确定位置,所以考虑如何才能让对于每一个$1 ~ i$使得$i$的答案最大,即$1 ~ i$最后一个最优.若设对于位置$i$,$a[ ...
- P1080 【NOIP 2012】 国王游戏[贪心+高精度]
题目来源:洛谷 题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王 ...
- [noip2012]国王游戏<贪心+高精度>
题目链接: https://vijos.org/p/1779 https://www.luogu.org/problem/show?pid=1080 http://codevs.cn/problem/ ...
- 【贪心】最大乘积-贪心-高精度-java
问题 G: [贪心]最大乘积 时间限制: 1 Sec 内存限制: 128 MB提交: 34 解决: 10[提交][状态][讨论版] 题目描述 一个正整数一般可以分为几个互不相同的自然数的和,如3 ...
随机推荐
- ueditor和thinkphp框架整合修改版
基于tp官网上的一篇文章修改的 因为tp中所有目录其实都是性对于入口文件的 在原来的基础上略做修改后 已经做到 无论项目放在www下的任何位置 图片在编辑器中回填后都能正常显示! http://fi ...
- WPF之模拟打开或关闭Windows功能
用WPF模拟打开或关闭Windows功能的实现方法其实很简单,主要用递归判断当前节点的子节点和父节点的选中状态就行了. 一.效果演示 先看看效果图: 二.部分代码 xaml代码: <TreeVi ...
- Dev Express 安装
Dev Express 安装 点击DevExpressUniversalTrialComplete-20151209.exe开始安装 选择需要安装的产品 选择需要安装的产品目录,这里设置为D盘 开 ...
- tomcat打开gzip、配置utf-8
在部署描述文件中配置如下内容:(web.xml) 打开gzip compression="on"配置utf-8 URIEncoding="UTF-8" < ...
- HDU 2112 Today(Dijkstra+map)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意: 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050 ...
- 以太坊go-ethereum客户端(三)两种全节点启动模式
这篇博客介绍一下go-ethereum全节点的两种启动模式:主网络快速启动和测试网络快速启动.这也是客户端所提供的两种启动方式,直接拿来使用即可.下面具体介绍一下使用方法. 主网络快速启动 其实,我们 ...
- Jmeter配置元件执行顺序
一.Jmeter组件 Sampler(采样器):真正干活的,比如http 定时器:默认为毫秒. 前置处理器和后置处理器:必须在有采样器才有效,在采样器的前后执行.作关联,拿响应中的数据使用,用得比较多 ...
- Web开发:URL编码与解码
通常如果一样东西需要编码,说明这样东西并不适合传输.原因多种多样,如Size过大,包含隐私数据,对于Url来说,之所以要进行编码,是因为Url中有些字符会引起歧义. 例如Url参数字符串中使用key= ...
- GDB调试实用命令
个人感觉从windows平台转到linux平台一个不适应的地方就是调试器的使用.因为windows下调试器基本上都依赖快捷键和图像界面来完成操作,就算是windbg这种伪命令行的工具,命令也很简单比较 ...
- Python 2 到 Python 3 的变化
1: commands 被 subprocess 所取代:举例 Python2中使用getoutput: >>> import commands >>> print ...