你好,國慶作業。

Hypoxia571發表於2024-10-02

CF2004E

套用 SG 函式的結論,我們先打單個遊戲的表再異或即可得到答案。首先對於一個大小為 \(i\) 的堆有 \(SG[i]=\text{mex}_{j\bot i}\{SG[j]\}\),容易暴力 dp。

int SG[N];
int f(int x) {
	if(SG[x]!=-1) return SG[x];
	if(x==0) return SG[0]=0;
	vector<int> g;
	up(i,1,x) if(__gcd(i,x)==1) g.pb(f(x-i));
	sort(g.begin(),g.end());
	if(g[0]>0) return 0;
	up(i,0,(int)g.size()-2) if(g[i]+1!=g[i+1]&&g[i]!=g[i+1]) return g[i]+1;
	return g[g.size()-1]+1; 
}

觀察到結論,首先 \(SG[0]=0,SG[1]=1\),然後第 \(i\) 個質數的 SG 值是 \(i\) 強相關的,合數的 SG 是最小質因子的 SG,線性篩求出即可。


相關文章