UESTC 1253 阿里巴巴和n个大盗 博弈、策略
2015-12-06 00:34
597 查看
阿里巴巴和n个大盗
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
Submit
Status
阿里巴巴和n个大盗来到了一个藏满宝石的洞穴。洞里一共有m颗价值连城的宝石,每一颗都等价。盗亦有道,为了奖励帮忙打开洞穴门的阿里巴巴,
大盗们决定让他一起加入分赃。大盗们决定采用一种方式分赃,分赃的方式如下:
1)每个人由抽签决定了自己的号码(1, 2, 3, ⋯, n+1)。
2)由n+1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时(包括他自己),按照他的方案进行分配,否则这个人将被杀死。
3)n+1号死后,由n号接替n+1号对剩下的人提出分配方案,类似2步骤。以此类推。
大盗们都有如下的几个性格特点
1)足智多谋,总是采取最优策略。
2)贪生怕死,尽量保全自己性命。
3)贪得无厌,希望自己得到越多宝石越好
4)心狠手辣,在自己利益最大的情况想希望越多人死越好。
5)疑心多虑,不信任彼此,尽量确保自身利益不寄希望与别人给自己更大利益。
不知道是不幸还是幸运,阿里巴巴抽到了n+1号签,意味着他将第一个提出分配方案。他想请教机智的你,他能否活下来,如果能又将获得最多
多少个宝石?
Input
两个整数n, m,分别表示n个大盗和m个宝石(1≤n≤2⋅m−2, 2≤m≤100)。
Output
如果阿里巴巴能活下来输出一个整数x表示阿里巴巴最多获得的宝石数,否则输出−1。
Sample input and output
Sample Input | Sample Output |
---|---|
4 100 | 97 |
Hint
分配方案 0 2 1 0 97 或2 0 1 0 97(从1号到5号)。
Source
第七届ACM趣味程序设计竞赛第二场(正式赛) D
My Solution
首先总人数是n+1人。由于必须半数以上人同意才能通过方案,所以当剩余两个人时2号必死,因为1号不同意就能独吞。
因此2号必须同意3号的方案,所以3号无论什么方案都会被通过,因此他会选择把所有宝石留给自己。
当总人数三个以上时就有以下的情况:显然4号需要至少3人的同意,可知3号是无论如何不会同意的,因此他只需要拉拢1,2号即可,
也就是给他们1,1的宝石。
5个人时只要3个人同意即可,此时因为5号如果死3号必定不会得到宝石,所以只要给他1个宝石即可。然后再拉拢1,2号中的任意一个,
给他们2个宝石即可。
以此类推,发现当(n+1)是偶数时阿里巴巴只要给1到n号人1,1,0,1,0,1,0....0即可;注意这里以 0 结尾 ;此时m-(n+1)/2。★
当(n+1)是奇数时只要给x,x,1,x,1,x,1....0(任意一个x是2,其余x都是0) ; 此时m-(n+2)/2。 ★
/*给1号或者2号*/即可
因为题目所给数据范围的限制,本题不会出现m不够用的情况,在这里不再讨论。
注意心狠手辣一词。
万恶的这帮强盗也太聪明了吧!
#include <iostream> #include <cstdio> #define LOCAL using namespace std; int main() { #ifdef LOCAL freopen("a.txt","r",stdin); #endif // LOCAL int n,m; scanf("%d%d",&n,&m); if(n==1) printf("-1"); else if(n==2) printf("%d",m); else if(n==3) printf("%d",m-2); else if(n==4) printf("%d",m-3); else { if(n%2==1)printf("%d",m-(n+1)/2); else printf("%d",m-(n+2)/2); } return 0; }
谢谢
相关文章推荐
- server core & GUI
- UESTC 1255 斓少摘苹果 贪心法
- 谈谈UICollectionView添加头视图的方法
- 1041. Be Unique (20)【水题】——PAT (Advanced Level) Practise
- How to build openmcu-ru on ubuntu
- UESTC 1251 谕神的密码 贪心法
- UESTC 1256 昊昊喜欢运动 n^2的预处理 or 前缀和
- Ubuntu 14 Trusty安装hue
- request.getParameterMap()使用方法
- 用XDOCBuilder制作精美的EPUB
- 如何避免UI界面中下拉框ComboBox文本项的硬编码?
- 基于swing的UI原型辅助设计
- 免费在线文字处理软件XDocBuilder发布7.4.0版本
- 如何通过UIView对象获取该对象所属的UIViewController
- 【Java】StudentsInfoQuery(简单的学生信息查询系统)
- UILable / UITextField / UIButton
- UIView / UIView的布局
- UIVIew之霓虹灯实现
- UILabel、UIImageView、UIButton的使用
- Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 10