PTA 海盗分赃

P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略:

首先,P 个海盗通过抽签决定 1 - P 的序号。然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得到包括 1 号在内的绝对多数(即大于半数)同意,则按照该分配方案执行,否则 1 号将被投入大海喂鲨鱼;而后依次类似地由第 2 号、第 3 号等等海盗提出方案,直到能够获得绝对多数同意的方案出现为止,或者只剩下最后一位海盗,其独占所有钻石。请编写一个程序,给出第 1 号海盗的钻石分配方案中自己分得的钻石数量。

附带的三个假定:

  • "聪明"与"贪婪"假定:每个海盗总能够以本人利益最大化作为行为准则;
  • "人性化"假定:在能够取得尽量多钻石的情况下,海盗不会故意致同伙于死地;
  • "无偏见"假定:海盗之间没有个人恩怨,分给其他海盗钻石的次序以小序号优先为原则。

输入格式:

输入在一行中给出 2 个正整数 D 和 P(3≤P≤D≤100)。

输出格式:

输出第 1 号海盗的钻石分配方案中自己分得的钻石数量。

输入样例:

10 7

输出样例:

6

代码实现:

cs 复制代码
#include <stdio.h>

/*
2r: 0 D
3r: D-1 1 0
4r: D-3 0 2 1
5r: D-3 0 1 0 2
6r: D-4 0 1 2 1 0
7r: D-4 0 1 2 0 0 1
8r: D-5 0 1 2 0 1 1 0
9r: D-5 0 1 2 0 1 0 0 1
10r:D-6 0 1 2 0 1 0 1 1 0
往后递增时只要给前一次为0的人一块钻石
再给一个前一次为1的人2块钻石就可以获得一半以上的支持
*/

int main() {
    int D, P;
    scanf("%d %d", &D, &P);
    if(P==3)printf("%d\n",D-1);
    else printf("%d\n",D-(P/2+1));
    return 0;
}
相关推荐
郑州光合科技余经理2 小时前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
To_OC5 小时前
LC 35 搜索插入位置:二分查找谁都会,边界条件谁写谁懵
javascript·算法·leetcode
码哥DFS5 小时前
二叉树的直径
开发语言·javascript·算法
paopaokaka_luck6 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
梦雨生生7 小时前
java开发工具(学习第一天)
java·开发语言·学习
营养充电站8 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
人工智能·算法·docker·jupyter
啊啊啊啊啊!!!!8 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
技术小黑9 小时前
RNN算法实战系列05 | 天气预测
人工智能·rnn·算法
松仔log9 小时前
Java中级——组合和继承
android·java·开发语言