傳送門
顯然的 $anti-sg$ ,直接套上結論就行
當然也可以略證一下
$1.$如果石頭堆都只有乙個石頭,那麼堆數為偶數時先手必勝
$2.$如果某堆有多個石頭,那麼總 $sg$ 不為 $0$ 時先手必勝
考慮只要一堆有多個石頭時,先手可以拿到只剩乙個或者全部拿完,然後就變成 $1.$ 的情況並且先手可以隨意控制堆的奇偶,先手必勝
如果有多堆石頭且 $sg$ 值不為 $0$ 時,先手顯然可以拿成 $sg$ 為 $0$ 的情況,然後後手又不得不拿成 $sg$ 不為 $0$ 的情況...最後 $sg$ 不為 $0$ 的情況一定是只剩一堆有多個石頭,然後就到了 $2.$ 的情況
後手面對非 $1.2.$ 時必輸,所以當且僅當 $1.2.$ 其中一條滿足時,先手必勝
#include#include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;inline
intread()
while(ch>='
0'&&ch<='
9')
return x*f;
}int
t,n,a,now;
intmain()
if((!now&&mx<=1) || (now&&mx>1)) printf("
john\n");
else printf("
brother\n");
}return0;
}
P4279 SHOI2008 小約翰的遊戲
我怎麼什麼都不會啊 qaq 博弈論怎麼和期望一樣玄學啊 qaq 我們分幾種情況討論 case1 只有一堆且為1,那麼後手勝利 case2 每一堆都是1,那麼只需要判斷奇偶性,奇數則先手敗,偶數則後手敗 case3 只有一堆不是1,其餘堆都是1,那麼可以根據就行,先手可以選擇是拿完或是那得只剩乙個 c...
P4246 SHOI2008 堵塞的交通
題意簡述 維護乙個 2 n 的網格圖的動態連通性 思路既然是動態連通性,那麼我們直接離線線段樹分治 可撤銷並查集 上面的做法太暴力了,我們考慮分析一些性質 注意到聯通的資訊是可以合併的,可以考慮使用線段樹維護 乙個想法是維護區間 左上 左下 到 右上 右下 的連通性 但這樣忽略了一種情況 1,1 1...
SHOI2008 小約翰的遊戲John
小約翰經常和他的哥哥玩乙個非常有趣的遊戲 桌子上有n堆石子,小約翰和他的哥哥輪流取石子,每個人取 的時候,可以隨意選擇一堆石子,在這堆石子中取走任意多的石子,但不能一粒石子也不取,我們規定取到最後一 粒石子的人算輸。小約翰相當固執,他堅持認為先取的人有很大的優勢,所以他總是先取石子,而他的哥哥就聰明...