UESTC - 1253 阿里巴巴和n个大盗 (博弈)
2016-03-07 07:55
666 查看
UESTC - 1253 阿里巴巴和n个大盗
Description 阿里巴巴和n个大盗来到了一个藏满宝石的洞穴。洞里一共有m颗价值连城的宝石,每一颗都等价。盗亦有道,为了奖励帮忙打开洞穴门的阿里巴巴,大盗们决定让他一起加入分赃。大盗们决定采用一种方式分赃,分赃的方式如下: 1)每个人由抽签决定了自己的号码(1, 2, 3, \cdots, 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 \leq n \leq 2 \cdot m-2, 2 \leq m \leq 100)。 Output 如果阿里巴巴能活下来输出一个整数x表示阿里巴巴最多获得的宝石数,否则输出-1。 Sample Input 4 100 Sample Output 97 //大神的题解,很清晰啊。 题解: 首先总人数是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....即可;当(n+1)是奇数时只要给x,x,1,x,1,x,1....(任意一个x是2,其余x都是0)即可。上述两种情况答案都是m-(n+1)/2。 因为题目所给数据范围的限制,本题不会出现m不够用的情况,在这里不再讨论。 #include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #define INF 0x3f3f3f3f #define ll long long #define N 10010 #define M 1000000007 using namespace std; int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { n++; int ans; if(n==2) ans=-1; else if(n==3) ans=m; else ans=m-(n+1)/2; printf("%d\n",ans); } return 0; } |
相关文章推荐
- poj 2031 Building a Space Station
- Easyui弹出Dialog时,Dialog中的Combobox的url会加载两次,不明原因,只能其他方法解决。
- iOS报错之this class is not key value coding-compliant for the key digitPressed.
- UIScrollView
- UIPikerView的属性
- cf#94-div1-A. Statues
- UIPageControl
- UI控件--UILabel
- UILabel属性
- UIImageView属性
- UIImagePickerController
- UIKit结构图
- iOS UIScrollView
- iOS开发技巧:布局UIButton的imageView和titleLabel属性
- UIDatePicker
- 01-复杂度2 Maximum Subsequence Sum
- UIImage 的初始化方法
- Gradle Issue: OutOfMemoryError: PermGen space
- UIControl事件
- White spaces are required between publicId and sys