在乙個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
22 02 2
1 12 2
sample output
case 1: alicecase 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個物品,每次只能...