博弈 塗色遊戲

2021-08-07 17:49:49 字數 1270 閱讀 7786

在乙個2*n的格仔上,alice和bob又開始了新遊戲之旅。 

這些格仔中的一些已經被塗過色,alice和bob輪流在這些格仔裡進行塗色操作,使用兩種塗色工具,第一種可以塗色任意乙個格仔,第二種可以塗色任意乙個2*2的格仔。每一輪遊戲裡,他們可以選擇一種工具來塗色尚未被染色的格仔。需要注意,塗色2*2的格仔時,4個格仔都應當未被塗色。最後一步塗滿所有格仔的玩家獲勝。 

一如既往,alice先手,最優策略,誰是贏家? 

input

輸入第一行為t,表示有t組測試資料。 

每組資料報含兩個數字,n與m,m表示有多少個已被染色的格仔。接下來的m行每行有兩個數字xi與yi,表示已經被塗色的格仔座標。 

[technical specification] 

1. 1 <= t <= 74 

2. 1 <= n <= 4747 

3. 0 <= m <= 2 * n 

4. 1 <= xi <= 2, 1 <= yi <= n,格仔座標不會重複出現 

output

對每組資料,先輸出為第幾組資料,然後輸出「alice」或者「bob」,表示這輪遊戲的贏家。

sample input

2

2 02 2

1 12 2

sample output

case 1: alice

case 2: bob

思路:可以先考慮有連續n列的空格的sg值是多少。

n=0時顯然sg[0]=0,之後就是普通的sg函式打表,只不過是要將格仔分割槽而已。

#include #include #include #include #include #include #include #include #include #define inf 0x3f3f3f3f

#pragma comment(linker, "/stack:102400000,102400000")

using namespace std;

const int maxn=5000;

int sg[maxn];

bool pl[2][maxn];

int get_sg(int x)

for(int i=0; i<=x-2-i; i++)

for(int i=0; ; i++)

}return sg[x];

}int main()

{ memset(sg, -1, sizeof(sg));

sg[0]=0;

for(int i=1; i

C 實現塗色遊戲(博弈)

在乙個2 n的格仔上,alice和bob又開始了新遊戲之旅。這些格仔中的一些已經被塗過色,alice和bob輪流在這些格仔裡進行塗色操作,使用兩種塗色工具,第一種可以塗色任意乙個格仔,第二種可以塗色任意乙個2 2的格仔。每一輪遊戲裡,他們可以選擇一種工具來塗色gshpan尚未被染色的格仔。需要注意,...

組合遊戲(博弈)

昨天看大白書翻到了組合遊戲這章,看著發覺原來是博弈論的內容,於是便看下去了。真是不看不知道,一看才知道自己的水平有多弱,不過好在還是集中精神地看了大部分。從nim遊戲 n堆石子,每人每次可以從任意一堆中取至少1個 至多整堆的石子,不能取者為輸 開始講起,引入必勝態 必敗態的概念 1.乙個狀態是必敗狀...

博弈遊戲(Bash Nim wythoff)

bash game nim game 和 wythoff game,較為領人驚嘆的是,他們最後都是通過數論或者自然數性質完美解決 bash game 同餘理論 nim game 異或理論 wythoff game 分割 一堆n個物品,兩人輪流取,每次取1至m個,最後取完者勝,比如10個物品,每次只能...