Stone
Stone
Alice 和 Bob 在玩取石子的遊戲。
他們共有 \(N\) 堆石子,第 \(i\) 堆石子有 \(a_{i}\) 個石子。
Alice 和 Bob 輪流取石子, Alice 先取,每一次取石子,當前取石子的人可以任選一堆還沒有被取完的石子,從中取出至少 \(1\) 個,至多 \(x\) 個石子。
如果當前取石子的人沒有石子堆可選,那麼他(她)就輸掉了遊戲。
他們想知道,如果 Alice 和 Bob 都用最優策略玩遊戲的話,誰會勝利。
由於 Alice 和 Bob 還沒商量好 \(x\) 取多少,所以對於每個 \(1\) 到 \(N\) 之間的 \(x\),你都需要告訴他們誰將取得勝利。
對於 \(20\%\) 的資料, \(N\leqslant 8\)
對於 \(50\%\) 的資料, \(N\leqslant 5\times 10^3\)
對於 \(100\%\) 的資料, \(1\leqslant N\leqslant 5\times 10^5,1\leqslant a_{i}\leqslant N\)
首先,當\(a_i< x\)時,就是經典的取石子了
而只有一堆石子的時候,同樣非常經典
所以不難得出當\(0={\LARGE\oplus}_{i=1}^Na_i\%(x+1)\)時為必敗態
因為我們可以將所有\(a_i\)拆成\(v+(x+1)t\),使得先手無論如何操作,後手總能使之等效於模數的\(Nim\)
這樣就變成了計算所有數模某個數的異或和
我們設\(f_{i,j}\)表示值域區間在\([i,i+2^j)\)內的元素減去\(i\)後的異或和
\(g_{i,j}\)表示值域區間在\([i,i+2^j)\)內的元素的元素奇偶性
不難得到\(f_{i,j}=f_{i,j-1}\oplus f_{i+2^{j-1},j-1}\oplus(g_{i+2^{j-1},j-1}*2^{j-1})\)
這樣就可以如同\(ST\)表地查詢了
時間複雜度\(O(n\log^2n)\)
因果乃旋轉紡車,光彩之多面明鏡#include<bits/stdc++.h> using namespace std; # define ll long long # define read read1<ll>() # define Type template<typename T> Type T read1(){ T t=0; char k; bool vis=0; do (k=getchar())=='-'&&(vis=1);while('0'>k||k>'9'); while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar(); return vis?-t:t; } # define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout) # define ll long long int a[500005],s,v[20][500005],h[20][500005],Log2[500005]; int query(int l,int r){ int t=0,g=0; for(int i;l<=r;) if(i=Log2[r-l+1],l+(1<<i)-1<=r) t^=v[i][l]|(h[i][l]*g),l+=1<<i,g|=1<<i; return t; } char pr[3000005],*Sta=pr; int main(){ fre("stone"); s=read; for(int i=1;i<=s;++i)h[0][read]^=1; for(int i=2;i<=s+1;++i)Log2[i]=Log2[i>>1]+1; for(int i=0;(1<<i+1)<=s+1;++i) for(int j=0;j+(1<<i+1)-1<=s;++j) h[i+1][j]=h[i][j]^h[i][j+(1<<i)], v[i+1][j]=v[i][j]^v[i][j+(1<<i)]^(h[i][j+(1<<i)]<<i); for(int i=1;i<=s;++i){ int ans=0; for(int j=0;j<=s;j+=i+1) ans^=query(j,min(j+i,s)); if(ans){ memcpy(Sta,"Alice",5); Sta[5]=" \n"[i==s];Sta+=6; }else{ memcpy(Sta,"Bob",3); Sta[3]=" \n"[i==s];Sta+=4; } }fwrite(pr,1,Sta-pr,stdout); return 0; }
浮世蒼茫,不過瞬逝幻夢
善惡愛誑,皆有定數
於命運之輪中
吞噬於黃泉之冥暗
嗚呼,吾乃夢之戍人
幻戀之觀者
唯於萬華鏡中,永世長存