P4136 誰能贏呢? 腦子

2022-03-30 07:29:51 字數 932 閱讀 3939

我們發現,若我們把棋盤黑白染色並設左上角為黑色,那麼顯然有:若\(n\)為奇數,黑色格仔比白色多一;若\(n\)為偶數,黑色格仔與白色的相等。

然後很顯然,如果他們能夠把所有格仔都走到或少走\(2*x\)個格仔(即不改變奇偶性),那麼上面的結論是成立的。

若最後有奇數個格仔沒有走到,那麼其實我們可以在中間改變最終的狀態。比如只剩了乙個格仔沒有走,那麼最後輸的人完全可以在經過那乙個格仔時殺掉對方。

即若有奇數個格仔剩餘,不是最優策略。

所以不可能有奇數個格仔是未被經過的。

所以我們證完啦\(qwq\)

#include#include#define ull unsigned long long

#define ll long long

#define r register int

using namespace std;

#define pause (for(r i=1;i<=10000000000;++i))

#define in freopen("noipak++.in","r",stdin)

#define out freopen("out.out","w",stdout)

namespace fread inline bool isempty(const char& ch)

inline void gs(char* s)

} using fread::g; using fread::gs;

namespace luitaryi

}signed main()

main()
2019.07.2

洛谷P4136 誰能贏呢?

小明和小紅經常玩乙個博弈遊戲。給定乙個n n的棋盤,乙個石頭被放在棋盤的左上角。他們輪流移動石頭。每一回合,選手只能把石頭向上,下,左,右四個方向移動一格,並且要求移動到的格仔之前不能被訪問過。誰不能移動石頭了就算輸。假如小明先移動石頭,而且兩個選手都以最優策略走步,問最後誰能贏?輸入格式 輸入檔案...

洛谷 P4136 誰能贏呢? 博弈論

小明和小紅經常玩乙個博弈遊戲。給定乙個n n的棋盤,乙個石頭被放在棋盤的左上角。他們輪流移動石頭。每一回合,選手只能把石頭向上,下,左,右四個方向移動一格,並且要求移動到的格仔之前不能被訪問過。誰不能移動石頭了就算輸。假如小明先移動石頭,而且兩個選手都以最優策略走步,問最後誰能贏?輸入格式 輸入檔案...

洛谷P4136 誰能贏呢? 題解 博弈論

找規律首先這道題目我沒有什麼思路,所以一開始想到的是通過搜尋來列舉 n 比較小的時候的情況。所以我開搜尋列舉了 n le 8 的所有情況。搜尋 include using namespace std const int maxn 11 int n bool vis maxn maxn res max...