三色抽卡遊戲 博弈論nim

2022-05-01 17:03:10 字數 1579 閱讀 3945

你的對手太壞了!在每年的年度三色抽卡遊戲錦標賽上,你的對手總是能打敗你,他的秘訣是什麼?

在每局三色抽卡遊戲中,有n

個卡組,每個卡組裡所有卡片的顏色都相同,且顏色只會是紅(r)、綠(g)、藍(b)中的一種。第i

個卡組有vi

張卡片。

對決雙方每次只能選擇乙個還未抽完卡的卡組,從中拿走若干張卡片,可以全拿走,但不能一張都不拿。你只能選擇顏色為紅或者綠的卡組,而對手只能選擇顏色為藍或者綠的卡組。

你是先手,你和對手輪流行動,誰不能操作了就輸了。

因為你的對手每次總是能打敗你,你決定寫乙個程式來幫助你做出決策。

給定遊戲剛開始時的卡組情況,你的程式需要判斷假設雙方都按照最優策略操作,那麼你是否會贏?

第一行包含乙個正整數t(1≤t≤100)

,表示測試資料的組數。

每組資料第一行包含乙個正整數n(1≤n≤1000)

,表示卡組的數量。

接下來n

行,每行乙個字元ci(ci∈)

和乙個正整數vi(1≤vi≤1000)

,分別表示第i

個卡組的顏色以及卡片數量。

對於每組資料輸出一行,若你能贏,輸出yes,否則輸出no。

3

2r 2

b 32

b 2r 3

3r 5

b 6g 1

no

yesno

主要是看綠色的牌 看誰能多抽一張 或者平局 就是nim遊戲 比賽的時候沒有反應過來 一直在找規律 不過反應過來也不會寫

nim遊戲只要進行位運算即可

#includeusing

namespace

std;

//input

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define repp(i,a,b) for(int i=(a);i>=(b);i--)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m);

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s);

#define ll long long

#define inf 0x3f3f3f3f

#define rep(i,n) for(int i=0;i

#define clr(a,v) memset(a,v,sizeof a)

/////////////////////////////////

/#define n 500+5

intmain()

if(flag)hong++;

if(hong>lan)

printf(

"yes\n");

else printf("

no\n");

}return0;

}

view code

博弈論 Nim遊戲

這種遊戲稱為nim博弈,遊戲過程中面臨的狀態成為局面。n im nimni m博弈不存在平局,只有先手必勝和先手必敗兩種情況。定理nim 博弈先手 必勝,當 且僅當a 1xora2 xor xoran 0nim博弈先手必勝,當且僅當 a 1 texta 2 text cdots text a n n...

博弈論(一) Nim遊戲

重點結論 對於乙個nim遊戲的局面 a1,a2,an 它是p position當且僅當a1 a2 an 0,其中 表示位異或 xor 運算。nim遊戲是博弈論中最經典的模型 之一?它又有著十分簡單的規則和無比優美的結論,由這個遊戲開始了解博弈論恐怕是最合適不過了。nim遊戲是組合遊戲 combina...

博弈論之Nim遊戲

二 nim遊戲的定義 三 過程例項 四 分析 3.bouton s theorem 五 例題 nim遊戲是博弈論中最經典的模型 之一 它又有著十分簡單的規則和無比優美的結論 nim遊戲是組合遊戲 combinatorial games 的一種,準確來說,屬於 impartial combinator...