P 個海盜偷了 D 顆鉆石后來到公海分贓,一致同意如下分贓策略:
首先,P 個海盜通過抽簽決定 1 - P 的序號。然后由第 1 號海盜提出一個分配方案(方案應給出每個海盜分得的具體數量),如果能夠得到包括 1 號在內的絕對多數(即大于半數)同意,則按照該分配方案執行,否則 1 號將被投入大海喂鯊魚;而后依次類似地由第 2 號、第 3 號等等海盜提出方案,直到能夠獲得絕對多數同意的方案出現為止,或者只剩下最后一位海盜,其獨占所有鉆石。請編寫一個程序,給出第 1 號海盜的鉆石分配方案中自己分得的鉆石數量。
附帶的三個假定:
- “聰明”與“貪婪”假定:每個海盜總能夠以本人利益最大化作為行為準則;
- “人性化”假定:在能夠取得盡量多鉆石的情況下,海盜不會故意致同伙于死地;
- “無偏見”假定:海盜之間沒有個人恩怨,分給其他海盜鉆石的次序以小序號優先為原則。
輸入格式:
輸入在一行中給出 2 個正整數 D 和 P(3≤P≤D≤100)。
輸出格式:
輸出第 1 號海盜的鉆石分配方案中自己分得的鉆石數量。
輸入樣例:
10 7
輸出樣例:
6
代碼實現:
#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;
}