題意:有n個海盜劫得了窖藏的m塊金子,並準備瓜分這些戰利品。按照古老流傳下來的分金法則,由最厲害的一名海盜提出乙個分金方案,假如有不小於一半的海盜(包括自己)支援這個方案,則按這個方案分,否則把這個海盜扔進海浬,重複由下乙個厲害的海盜提出方案。
大家都知道,所有海盜都是貪婪的,雖然他們都樂於看到自己的同伴被扔進海浬,但是他們還是希望在保命的前提下分的最多的金子,現在已經按海盜的厲害程度進 行了編號,最厲害的海盜為最大號,依次到小,那麼第 k 號海盜能分的多少金。(如果他的得金數不能確定,輸出0)
輸入:(1 ≤ n ≤ 10^4) (1 ≤ m ≤ 10^7)(1 ≤ k ≤ n)
輸出:第k個海盜能獲得的金幣數
參考博文:
思路:如果從上往下分析,將會受到小號策略的影響,不妨逆向從小號(只剩1和2)開始往大遞推出關聯,關聯詳見博文;
此題的關鍵必須深刻理解海盜之間的規則:
1.即使沒有金幣,也必須要保住性命;
如在n > 2*m部分,第乙個穩定狀態(n-2*m為2^k,同時也是確定分配方案的海盜的id)就是通過給1~2m海盜分配每人分配1個金幣收買,剩下的支援票屬於就是來自於n-2^(k-1)~n怕死而支援的海盜;
2.在保命的前提下,能獲得金幣最好;
在n = 2*m+1時,為了保命只能將m個金幣全部給奇數好的海盜,但是在n = 2m+2時,就可以利用2m+1這一點,可選的海盜數就為101個,這裡就產生了不確定性;
即當第乙個穩定狀態n >= 2m+2時,任意小於等於n的海盜要不就是》2m原本就不能獲得,只是存活下來,結果為0。要不就是因為上乙個狀態的不確定性,導致不能確定是否會獲得金幣,結果也是0;
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include
12 #include13 #include14
using
namespace
std;
15#define rep0(i,l,r) for(int i = (l);i < (r);i++)
16#define rep1(i,l,r) for(int i = (l);i <= (r);i++)
17#define rep_0(i,r,l) for(int i = (r);i > (l);i--)
18#define rep_1(i,r,l) for(int i = (r);i >= (l);i--)
19#define ms0(a) memset(a,0,sizeof(a))
20#define ms1(a) memset(a,-1,sizeof(a))
21#define msi(a) memset(a,0x3f,sizeof(a))
22#define inf 0x3f3f3f3f
23 typedef long
long
ll;24
#define a first
25#define b second
26#define mk make_pair
27 template28
void read1(t &m)
2932
while(ch>='
0'&&ch<='9')
33 m = x*f;34}
35 template36
void read2(t &a,t &b)
37 template38
void read3(t &a,t &b,t &c)
39 template40
void
out(t a)
4145
int t,kase = 1
,i,j,k,n,m,c;
4647
intmain()
48else
63if(ans == -1) puts("
thrown");
64else printf("
%d\n
",ans);65}
66return0;
67 }
海盜分財寶
關於海盜分財寶問題的一點看法 問題如下 10名智商極其高的海盜 都會選擇最有利於自己的方案 掠得100顆寶石。分贓。方法 10名海盜抽籤編為1 10號。從1號開始提出分贓方案,然後表決 本人的票計算在內 若超過半數人同意,則通過方案 否則扔進海浬餵魚。若1號死亡,則從2號繼續。問題 如果你是1號,如...
海盜分寶問題
數學的邏輯有時會導致看來十分怪異的結論。一般的規則是,如果邏輯推理沒有漏洞,那麼結論就必定站得住腳,即使它與你的直覺矛盾。1998年9月,加利福尼亞州帕洛阿爾托的stephen m.omohundro寄給我一道難題,它恰好就屬於這一類。這難題已經流傳了至少十年,但是omohundro對它作了改動,使...
海盜分寶石邏輯題目
問題描述 5個海盜搶到了100顆寶石,每一顆都一樣的大小和價值連城。他們決定這麼分 1。抽籤決定自己的號碼 1,2,3,4,5 2。首先,由1號提出分配方案,然後大家5人進行表決,當且僅當超過半數的人同意時,按照他的提案進行分配,否則將被扔入大海喂鯊魚。3。如果1號死後,再由2號提出分配方案,然後大...