具體思路:首先,這是乙個公平的比賽,並且是兩個人參與,兩個人都足夠聰明,並且可以通過有限步結束比賽,所以可以通過sg函式解決,注意這個題的不同,假設當前的某一堆堆數是5,如果分成每堆為2,他的子狀態是2 2 1,和之前做過的子狀態不同,之前做的題拿掉的就相當於扔掉了,而這個題並沒有。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11
using
namespace
std;
12 # define ll long
long
13 # define maxn 2000+100
14 # define inf 0x3f3f3f3f
15int
ans[maxn];
16int
vis[maxn];
17int
main()
1829
for(int j=0; j<=2000; j++)
3036}37
}38intn;
39int
temp;
40int t=0
;41 scanf("
%d",&n);
42for(int i=1; i<=n; i++)
4347
if(t)printf("
first\n");
48else printf("
second\n");
49return0;
50}51
組合遊戲中的SG函式
給定乙個有向無環圖和乙個起始頂點上的一枚棋子,兩名選手交替的將這枚棋子沿有向邊進行移動,無法移 動者判負。事實上,這個遊戲可以認為是所有impartial combinatorial games的抽象模型。也就是說,任何乙個icg都可以通過把每個局面看成乙個頂點,對每個局面和它的子局面連一條有向邊來...
我對SG函式的理解
i 的sg函式g i 定義如下 如果該點沒有出邊,g i 0 否則定義乙個mex minimal excludant 操作,這是對乙個集合進行的操作,返回值為集合中所不包含的最小的非負整數,那麼g i m ex。顯然對於乙個有向無環圖,我們都能在o 狀態總數 每個點 的後繼狀 態數 時間內求出所有點...
博弈論 SG函式入門 一維陣列多分支狀態
摘自piaocoder的部落格 首先定義mex minimal excludant 運算,這是施加於乙個集合的運算,表示最小的不屬於這個集合的非負整數。例如 mex 3 mex 0 mex 0。對於乙個給定的有向無環圖,定義關於圖的每個頂點的sprague grundy函式g如下 g x mex,這...