題目鏈結
小 n 和小 o 在玩遊戲。他們面前放了 n 堆石子,第 i 堆石子一開始有 ci 顆石頭。他們輪流從某堆石子中取石子,不能不取。最後無法操作的人就輸了這個遊戲。但他們覺得這樣玩太無聊了,更新了一下規則。具體是這樣的:對於一堆有恰好 m 顆石子的石頭堆,假如乙個人要從這堆石子中取石子,設他要取石子數為 d,那麼 d 必須是 m 的約數。最後還是無法操作者輸。
現在小 n 先手。他想知道他第一步有多少種不同的必勝策略。乙個策略指的是,從哪堆石子中,取走多少顆石子。只要取的那一堆不同,或取的數目不同,都算不同的策略。
第一行乙個整數 n。
接下來一行 n 個整數,分別代表每堆石子的石子數目。
資料保證輸入的所有數字都不超過105,均大於等於 1,且為整數。
一行乙個整數代表小 n 第一步必勝策略的數量。
輸入10
47 18 9 36 10 1 13 19 29 1
輸出
#include
using
namespace std;
const
int maxn=
1e5+5;
int s[maxn]
,sg[maxn]
,a[maxn]
,n,cnt=0;
vector<
int> f[maxn]
;void
getsg()
for(
int t=0;
;t++)}
}return;}
intmain()
}}}getsg()
; cin>>n;
int sum=0;
for(
int i=
1;i<=n;i++
)int ans=0;
for(
int i=
1;i<=n;i++)}
} cout
}
博弈sg函式
sg函式 個人認為還是用於三種方法都無法解決的情況,如按特殊數字取石子 我們把整個博弈過程抽象為有向無環圖 1.幾項準備工作 mex求最小非負整數mex 0,mex 3,mex 0 sg x mex 就是石頭變少的繼 這樣sg就滿足幾個性質 1.sg x 0時,它的後繼都不為零 2.sg x 0時,...
博弈SG函式
題意 乙個棋盤有n行,每行20格仔,都有一些棋子,兩個人輪流進行這個操作 選擇某一行乙個棋子移動到該行右邊第乙個空的格仔。不能進行的人輸。問先手是否能贏。分析 sg函式的應用,當時自己做的時候沒做出來qaq。終結點是這一行沒有棋子可以走,即0,然後逆推出其他結點的sg函式。每一行的狀態看成是乙個結點...
SG函式博弈函式
必勝點和必敗點的概念 p點 必敗點,換而言之,就是誰處於此位置,則在雙方操作正確的情況下必敗。n點 必勝點,處於此情況下,雙方操作均正確的情況下必勝。必勝點和必敗點的性質 1 所有終結點是 必敗點 p 我們以此為基本前提進行推理,換句話說,我們以此為假設 2 從任何必勝點n 操作,至少有一種方式可以...