PAT 2-10. 海盗分赃(25)
题目链接:http://www.patest.cn/contests/ds/2-10
解题思路:参考:http://blog.csdn.net/linsheng9731/article/details/22613483?utm_source=tuicool
假设一种普通的情况,10颗钻石7个人分。
如果只剩2个人,那么无论2说什么1都会反对,除非他把钻石全给他。也就是下面这种情况。
(0,10)
如果只剩3个人,3知道了如果自己死了2的处境会很惨,如果想让自己的提议实现只要争取1个人的同意就好了。所以3会给2号一颗钻石2就会同意3的提议。这样就变成了:
(9,1,0)
如果只剩4个人,4知道了如果自己死了3的方案,如果想让自己的提议实现只要争取2个人的同意就好了。所以4会给2号多一颗钻石,给1号一颗钻石,1和2就会同意4的提议。这样就变成了:
(7,0,2,1)
如果只剩5个人,5知道了如果自己死了4的方案,如果想让自己的提议实现只要争取2个人的同意就好了。所以5会给3号一颗钻石,给1号2颗钻石。这样就变成了:
(7,0,1,0,2)
如果只剩6个人,6知道了如果自己死了5的方案,如果想让自己的提议实现只要争取3个人的同意就好了。所以6会给4,2号一颗钻石,给3号2颗钻石。这样就变成了:
(6,0,1,2,1,0)
现在我们可以推出7个人的情况了,7知道了如果自己死了6的方案,如果想让自己的提议实现只要争取3个人的同意就好了。所以7会给4,2号一颗钻石,给3号2颗钻石。这样就变成了:
(6,0,1,2,0,0,1)
整个的过程如下:
(0,10)
(9, 1, 0)
(7, 0, 2,1)
(7 ,0, 1, 0,2)
(6,0,1, 2, 1,0)
(6, 0, 1,2, 0, 0,1)
以上的推理当然都是基于一定的假设前提的,最重要的前提就是海盗足够聪明,会考虑极端情况,只讲理性,所以他们会从后面开始考虑。
其实只要仔细观察上述数列我们就会总结出规律:ans=D-P/2-1;除了情况3之外。,情况3的规律是:ans=D-P/2
代码如下:
#include<iostream>
using namespace std;
int main()
{
int d,p,ans;
cin>>d>>p;
if(p==3)
{
ans=d-p/2;
}
else
{
ans=d-p/2-1;
}
cout<<ans<<endl;
return 0;
}
最新文章
- AAS代码运行-第11章-2
- oracle系列--第五篇 PLSQL连接本地的Oracle数据库
- c# await 关键字错误
- php正确解码javascript中通过escape编码后的字符
- python 自动化之路 logging日志模块
- Zend Cache的学习和实例
- SQLServer 跨服务器查询的两个办法
- strcpy_s
- shapeless官方指南翻译写在前面
- [转] windows 上用程序putty使用 ssh自动登录Linux(Ubuntu)
- webapp之路--百度手机前端经验(转)
- http(一)web和网络基础
- WPF popup置顶
- POJ 1861:Network(最小生成树&;amp;&;amp;kruskal)
- npm安装删除模块以及cnpm淘宝镜像
- mininet的学习之二-----miniedit可视化
- Python的socket模块与交互式指令
- 巧用 Jersey RESTful WebService框架解决文件上传乱码
- Spark在Windows下的环境搭建(转)
- 二分搜索-HihoCoder1128
热门文章
- three.js 对象绕任意轴旋转--模拟门转动
- springboot(三)SpringDataJPA完成CRUD
- js:事件(注册、解绑、DOM事件流、事件对象、事件委托)
- SpringBoot2 整合MinIO中间件,实现文件便捷管理
- Redis 的 KEYS 命令不能乱用啊
- java反序列化——apache-shiro复现分析
- Python os.remove() 方法
- PHP date_add() 函数
- PHP lcfirst() 函数
- [USACO09NOV]硬币的游戏 博弈 dp