编程之美 初赛第一场 竞价
来源:互联网 发布:java split . 编辑:程序博客网 时间:2024/04/30 12:49
描述
Alice和Bob都要向同一个商人购买钻石。商人手中有 N 颗钻石,他会将它们一颗颗地卖给他们,Alice和Bob通过竞价的方式来决定钻石的归属。具体的过程如下:商人首先指定其中一个人开始报价,之后两人轮流报价,要求是一定要比对方报的价格更高。任何时候,如果一个人不愿出价或者出不起价钱时,可以宣布弃权,则对手以最后一次报的价格将钻石买下。当然,如果两人都没钱,商人是不会卖钻石的。首次报价至少为 1,并且只能报整数的价钱。
Alice和Bob特别爱攀比,因此他们都希望能比对方买到更多的钻石。Alice和Bob各自带了 CA 和 CB 的钱用于竞拍钻石。此外,Alice和商人有很不错的私人关系,因此商人总是会让Alice先报价。现在请问,在Alice和Bob都用最优策略的情况下,谁能买到更多钻石?假设双方都知道对方手中的现金数量,以及商人将要拍卖的钻石数量 N。
输入
输入文件包含多组测试数据。
第一行,给出一个整数T,为数据组数。接下来依次给出每组测试数据。
每组数据为三个用空格隔开的整数 N,CA,CB,表示钻石的数量,以及双方带的现金数量。
输出
对于每组测试数据,输出一行"Case #X: Y",其中X表示测试数据编号,Y的取值为{-1, 0, 1},-1表示Alice买到的钻石会比Bob少,0表示两人能买到一样多,1表示Alice能买到更多钻石。所有数据按读入顺序从1开始编号。
数据范围
1 ≤ T ≤ 1000
小数据:0 ≤ N ≤ 10; 0 < CA, CB ≤ 10
大数据:0 ≤ N ≤ 105; 0 < CA, CB ≤ 106
这道题很有意思的~
之前都以为是博弈,结果木有做出来啊~
完了看看别人的解题报告,才发现啊。。。应该算是一道思维题了
首先求出如果两个人平分宝石,那么最多会得到n;
算出以A,B的钱数,得到n个宝石平均价值va,vb;
如果A按B的平均价值vb,可以得到的宝石数na;
if(na>n)那么a赢;
同理;if(nb>n)那么b赢;
如果前两者都不成立,那么a与b为平手。。。
像这样,转换思维,并不需要弄清中间A,B的过程,只要知道结果即可;
代码:
#include<iostream>using namespace std;int main(){ int m; cin>>m; int times=0; while(m--){ times++; int n,a,b; cin>>n>>a>>b; cout<<"Case #"<<times<<": "; int n1=n; n=(n+1)/2; int av=a/n; int bget=b/(av+1); if(2*bget>n1){ cout<<"-1"<<endl; continue; } int bv=b/n; int aget=a/bv; if(2*aget>n1){ cout<<"1"<<endl; continue; } cout<<"0"<<endl; } return 0;}
- 编程之美 初赛第一场 竞价
- 编程之美初赛第一场 焦距
- 编程之美初赛第一场 树
- 编程之美初赛第一场 活动中心
- 编程之美初赛第一场 焦距
- 编程之美初赛第一场 树
- 编程之美初赛第一场 活动中心
- 2014编程之美初赛第一场
- 编程之美初赛第一场
- 编程之美(初赛第一场)
- 编程之美初赛第一场--焦距
- 编程之美初赛第一场 活动中心
- 编程之美初赛第一场--树
- 编程之美初赛第一场 树
- 编程之美初赛第一场_2014
- 编程之美初赛第一场 树
- 编程之美初赛第一场
- 编程之美 2014 初赛第一场
- Collaborative filtering with GraphChi
- IOS 预览功能(轻松实现对各种文本、图片等查看)
- Collaborative filtering with GraphChi
- Before You Refactor
- C# GetWindowThreadProcessId用法
- 编程之美 初赛第一场 竞价
- Transformations USACO
- 重定向与跳转的区别
- Webkit对Javascipt的执行优先级
- Collaborative filtering with GraphChi
- 第七周项目一
- 单机模式处理大数据,搜集一些好用的开源利器
- emacs c++
- UITabBarController的简单使用