【推导】【贪心】【高精度】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 ...
随机推荐
- Laravel 5.4 migrate时报错: Specified key was too long error
Laravel 5.4默认使用utf8mb4字符编码,而不是之前的utf8编码.因此运行php artisan migrate 会出现如下错误: [Illuminate\Database\QueryE ...
- 【leetcode 简单】 第八题 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1 ...
- 【译】第四篇 SQL Server代理配置数据库邮件
本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Serve ...
- php之复制文件——php经典实例
php之复制文件——php经典实例 <?php function dirCopy($dir1,$dir2){ //判断是否目录存在 if(!file_exists($dir2) || !is_d ...
- select count(*) from user注入
先来看一条sql语句: mysql; +------+----------+----------+------------+ | id | username | password | flag | + ...
- http://www.onvif.org/onvif/ver20/util/operationIndex.html
http://www.onvif.org/onvif/ver20/util/operationIndex.html
- 自动化运维工具SaltStack详细部署【转】
==========================================================================================一.基础介绍==== ...
- 用于启动 Windows Phone 8 内置应用的 URI 方案
本主题列出了可用于启动内置应用的 URI 方案.许多内置于 Windows Phone 的应用,都可以通过调用 LaunchUriAsync(Uri) 和传入一个使用与要启动应用相关的方案的 URI, ...
- AssetBundle——外部加载资源Asset
几篇很不错的文章 AssetBundle创建到使用入门 全面理解Unity加载和内存管理 实用的创建AssetBundle的脚本 相关资源 相关的共享资源下载 本共享包括创建assetbund ...
- systemd基础
systemd 起源 systemd这一名字源于Unix中的一个惯例:在Unix中常以“d”作为系统守护进程(英语:daemon,亦称后台进程)的后缀标识.除此以外,systemd亦是借代英文术语D体 ...