C 實現塗色遊戲(博弈)

2022-10-03 23:33:16 字數 1546 閱讀 7605

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

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

一如既往,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

22 0

2 21 1

2 2sample 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 www.cppcns.com0x3f3f3f3f

#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()

if(pl[0][i]^pl[1][i]) //如果這一列之塗了乙個格仔,那麼異或這一列格仔之前的連續空格子的sg值再異或1

cnt++; //如果這一列沒有格仔被塗,那麼連續空格子的長度+1

} ans^=sg[cnt];

if(ans)

printf("case %d: alice\n", cas);

else

printf("case %d: bob\n", cas);

} return 0;

}本文標題: c++實現塗色遊戲(博弈)

本文位址:

博弈 塗色遊戲

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

組合遊戲(博弈)

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

博弈遊戲(Bash Nim wythoff)

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