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;
}
相关推荐
千纸鹤安安4 小时前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法
七牛开发者7 小时前
MCP 到底是什么?为什么 Agent 都想接上它
算法·aigc·agent
卷无止境12 小时前
C++ 的Eigen 库全解析
c++
卷无止境12 小时前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴13 小时前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake
kisshyshy13 小时前
从递归到迭代,一文吃透二叉树的核心知识与 JavaScript 实现
javascript·算法·代码规范
To_OC1 天前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
用户938515635071 天前
从 O(n²) 到 O(nlogn):一文读懂快速排序的“快”与“妙”
javascript·算法