题目链接: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;
}

  

最新文章

  1. AAS代码运行-第11章-2
  2. oracle系列--第五篇 PLSQL连接本地的Oracle数据库
  3. c# await 关键字错误
  4. php正确解码javascript中通过escape编码后的字符
  5. python 自动化之路 logging日志模块
  6. Zend Cache的学习和实例
  7. SQLServer 跨服务器查询的两个办法
  8. strcpy_s
  9. shapeless官方指南翻译写在前面
  10. [转] windows 上用程序putty使用 ssh自动登录Linux(Ubuntu)
  11. webapp之路--百度手机前端经验(转)
  12. http(一)web和网络基础
  13. WPF popup置顶
  14. POJ 1861:Network(最小生成树&amp;amp;&amp;amp;kruskal)
  15. npm安装删除模块以及cnpm淘宝镜像
  16. mininet的学习之二-----miniedit可视化
  17. Python的socket模块与交互式指令
  18. 巧用 Jersey RESTful WebService框架解决文件上传乱码
  19. Spark在Windows下的环境搭建(转)
  20. 二分搜索-HihoCoder1128

热门文章

  1. three.js 对象绕任意轴旋转--模拟门转动
  2. springboot(三)SpringDataJPA完成CRUD
  3. js:事件(注册、解绑、DOM事件流、事件对象、事件委托)
  4. SpringBoot2 整合MinIO中间件,实现文件便捷管理
  5. Redis 的 KEYS 命令不能乱用啊
  6. java反序列化——apache-shiro复现分析
  7. Python os.remove() 方法
  8. PHP date_add() 函数
  9. PHP lcfirst() 函数
  10. [USACO09NOV]硬币的游戏 博弈 dp