题意:每个队伍有个赔率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的更多相关文章

  1. POJ 2325 Persistent Numbers#贪心+高精度除法

    (- ̄▽ ̄)-* 这道题涉及高精度除法,模板如下: ]; ];//存储进行高精度除法的数据 bool bignum_div(int x) { ,num=; ;s[i];i++) { num=num*+ ...

  2. [NOIp2012] 国王游戏(排序 + 贪心 + 高精度)

    题意 给你两个长为 \(n+1\) 的数组 \(a,b\) ,你需要定义一个顺序 \(p\) (\(p_0\) 永远为 \(0\)) 能够最小化 \[ \max_{i=1}^{n} \frac{\pr ...

  3. P1080 国王游戏 贪心 高精度

    题目描述 恰逢 HH国国庆,国王邀请nn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 nn 位大臣排成一排,国王站在队伍的 ...

  4. luogu1080 国王游戏(贪心+高精度)

    貌似这道题是碰巧蒙对了贪心的方式..就是把ai*bi越小的放在越前面 (不过也符合直觉) 然后统计答案需要用高精度,然后就调了一年 #include<cstdio> #include< ...

  5. luoguP1080 国王游戏 (贪心+高精度)

    题目链接:https://www.luogu.org/problemnew/show/P1080 参考:https://www.luogu.org/problemnew/solution/P1080 ...

  6. 【NOIP2012提高组】国王游戏 贪心 + 高精度

    题目分析 题目答案不具有单调性,所以不可以二分,转而思考贪心.因为无法确定位置,所以考虑如何才能让对于每一个$1 ~ i$使得$i$的答案最大,即$1 ~ i$最后一个最优.若设对于位置$i$,$a[ ...

  7. P1080 【NOIP 2012】 国王游戏[贪心+高精度]

    题目来源:洛谷 题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王 ...

  8. [noip2012]国王游戏<贪心+高精度>

    题目链接: https://vijos.org/p/1779 https://www.luogu.org/problem/show?pid=1080 http://codevs.cn/problem/ ...

  9. 【贪心】最大乘积-贪心-高精度-java

    问题 G: [贪心]最大乘积 时间限制: 1 Sec  内存限制: 128 MB提交: 34  解决: 10[提交][状态][讨论版] 题目描述  一个正整数一般可以分为几个互不相同的自然数的和,如3 ...

随机推荐

  1. 重载jquery on方法实现click事件在移动端的快速响应

    额,这个标题取的还真是挺装的... 其实我想表达的是jquery click事件如何在移动端自动转换成touchstart事件. 因为移动端click事件会比touchstart事件慢几拍 移动设备某 ...

  2. vista风格的cms企业html后台管理系统模板——后台

    链接:http://pan.baidu.com/s/1c1Cv99e 密码:20yz

  3. android 图片旋转 移动 放大缩小

    图片的变化主要是matrix的变化,对matrix不懂的可以先了解下matrxi. public class FunnyView extends View { /* * 手指按下时可能是移动 也可能是 ...

  4. python之smtplib库学习

    # -*- coding:utf-8 -*- import smtplibfrom email.mime.text import MIMETextfrom email import encodersf ...

  5. java基础10 单例模式之饿汉式和懒汉式单例

    前言: 软件行业中有23中设计模式 单例模式    模版模式    装饰者模式    观察者模式    工厂模式    ........... 单例模式 1. 单例模式包括 1.1 饿汉式单例 1.2 ...

  6. Linux环境Nginx安装、调试以及PHP安装

    linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5 1.编译安装Nginx 官网:http://wiki.nginx.org/Install 下 ...

  7. (My)SQL

    1.SQL语句分类 DDL(Data Definition Languages)语句:用来创建 删除 修改数据库.表.列.索引等数据库对象.常用的语句关键字主要包括create.drop.alter等 ...

  8. scala学习5--函数二

    to  def test() : Unit = { // for(i <- 1.to(100)){ // println(i) // } for(i <- 1 to 100 ){ prin ...

  9. centos6下mysql的主从复制的配置

    2015年9月17日 23:00:36 update 想要好好了解mysql复制,还是去看看<高性能MySQL>(第三版)好了,上面说的比较详细. =========== 在本地用virt ...

  10. scrapy 学习笔记1

    最近一段时间开始研究爬虫,后续陆续更新学习笔记 爬虫,说白了就是获取一个网页的html页面,然后从里面获取你想要的东西,复杂一点的还有: 反爬技术(人家网页不让你爬,爬虫对服务器负载很大) 爬虫框架( ...