題面:
tbl和x用巧克力棒玩遊戲。每次一人可以從盒子裡取出若干條巧克力棒,或是將一根取出的巧克力棒吃掉正整數長度。tbl先手兩人輪流,無法操作的人輸。 他們以最佳策略一共進行了10輪(每次一盒)。你能**勝負嗎?
如果勝則輸出"no",否則輸出"yes"
解:nim白學.......
考慮第乙個人第一步要幹什麼能夠必勝。顯然他要取出一些使得當前sg為0,且接下來對方無法取出一些使得sg仍為0。
於是把盒中^起來為0的極大集合取出來就好了。
如果不存在這樣的集合那麼先手必敗。
線性基即可。
1 #include 2ac**3const
int n = 20;4
5int b[32
], a[n];
67 inline void
solve() 22}
23if(!fd) 27}
28 printf("
yes\n");
29return;30
}3132int
main()
3839
return0;
40 }
我一直想的是狀壓取了哪些然後暴力sg.....發現並不會
bzoj 1299 巧克力棒 博弈論
不考慮從盒子中拿出這一操作,則剩下的部分就是乙個nim遊戲。所以先手第一次只要拿到異或和為零的巧克力棒就必勝。因為若對手選擇吃巧克力棒,則是必敗局面。若選擇拿出巧克力,則新的異或和一定不為零,因為如果一組巧克力異或和為零,則先手可以第一次的時候拿出來。直接dfs就可以。include include...
BZOJ 1299 LLH邀請賽 巧克力棒
演算法 博弈論 題解 這道題不是典型的sg函式題了。不把它當成遊戲看待,那麼這道題是在說n個石子堆,每次可以加入若干個或進行nim遊戲。我們當前先手,則考慮構造必敗態來獲勝。當前已加入的nim遊戲sg 0,則必須考慮加入石子堆,若加入m堆構造出sg 0,對方有兩種選擇 加入新的石子堆,則必須是sg ...
BZOJ 1299 LLH邀請賽 巧克力棒
如果沒有拿巧克力棒的操作的話 是乙個裸的nim遊戲 現在加入了這個操作 改變了異或的值 那麼我們只需要判斷先手的人是否可以從集合中取出乙個極大的異或值為0的子集即可 include include include include include include using namespace std...