題目傳送門
題目大意:有乙個 1×n
1\times n
1×n 的棋盤,上面有 k
kk 顆棋子,一半白一半黑,並且相鄰棋子顏色不同,兩個人輪流操作,乙個人只能將白棋子右移,乙個人只能將黑棋子左移,每個人一次最多移動 d
dd 顆棋子,問有多少種局面先手必勝(先手操作白棋子)。
將相鄰的一對黑白棋子看成一堆石子,他們之間的距離就是石子數量,那麼就一共有 k/2
k/2k/
2 堆 石子,變成了乙個 d
dd 階的 nim
nimni
m 遊戲。
考慮 1
11 階 nim
nimni
m 遊戲的必敗情況:假如所有石頭數量異或和為 0
00 則必敗,這等價於,將每堆石子數量轉化為二進位制數,然後對於所有 i
ii,第 i
ii 位為 1
11 的數的個數恰好為 2
22 的倍數。
類似的,d
dd 階 nim
nimni
m 遊戲的必敗情況就是:對於所有 i
ii,第 i
ii 位為 1
11 的數的個數恰好為 d+1
d+1d+
1 的倍數,證明也類似,因為 d
dd 階 nim
nimni
m 遊戲中,乙個人一次操作可以將任意位的 1
11 的個數減少 1
11 ~ d
dd 個,那麼每一位就是乙個 bas
hbash
bash
遊戲,所以如果都是 d+1
d+1d+
1 的倍數就必敗。
為了方便,先將 k
kk 除以 2
22,則 k
kk 的意義就變成了石子堆數。
求必勝局面數不好求,正難則反,考慮求出必敗局面數,總局面數顯然為 (n−
2∗k+
2∗k+
1−12
∗k+1
−1)=
(n2∗
k)
\binom =\binom n
(2∗k+1
−1n−
2∗k+
2∗k+
1−1
)=(2
∗kn
),即將空位插入到所有棋子中間。
設 f [i
]f[i]
f[i]
表示石子總數為 i
ii,分成 k
kk 份使先手必敗的方案數。考慮列舉每一位上 1
11 的總數(一定是 d+1
d+1d+
1 的倍數),然後將這些 1
11 用組合數分配到每個石子堆裡就可以了。最後統計答案時,f[i
]f[i]
f[i]
的貢獻為 f[i
]×(n
−2∗k
+k+1
−1k+
1−1)
f[i]\times\binom
f[i]×(
k+1−
1n−2
∗k+k
+1−1
),組合數是表示將沒用到的空位放到 k
kk 堆石子的間隙中。
時間複雜度 o(13
n×nd
+1
)o(13n\times \frac n )
o(13n×
d+1n
),當 d=1
d=1d=
1 時會被卡到 13n2
13n^2
13n2
,但是眾所周知理論時間複雜度和實際時間複雜度是兩個東西,所以我這個**不開 o2o2
o2洛谷rk3,開了 o2o2
o2在洛谷甚至以 22ms
22ms
22ms
能跑到rk1(目前)……
**如下:
#include
#include
#include
using
namespace std;
#define maxn 10010
#define mod 1000000007
int n,k,d;
int fac[maxn]
,inv[maxn]
,inv_fac[maxn]
;void
facinit()
intbinom
(int x,
int y)
int f[maxn]
,tmp[maxn]
;void
add(
int&x,
int y)
intmain()
}for
(int j=
0;j<=n;j++
)f[j]
=tmp[j]
,tmp[j]=0
;}int ans=0;
for(
int i=
0;i<=n;i++
)add
(ans,
1ll*f[i]
*binom
(n-i+k+1-
1,k+1-
1)%mod)
; ans=
(binom
(n,k*2)
-ans+mod)
%mod;
printf
("%d"
,ans)
;}
SDOI2011 黑白棋 題解
題目鏈結 題意略首現發現對於一次單獨的遊戲,是乙個取石子遊戲 共有 frac 堆石子,每次取至多 d 堆,每堆若干個,是個 text 遊戲。結論 將每堆石子的個數用二進位制表示。如果過每一位 1 的個數都能被 d 1 整除後手必勝,否則先手必勝。感性證明一下 於是考慮如何計數,可以考慮 binom ...
SDOI2011 染色 題解
題目大意 給定一棵有n個節點的無根樹和m個操作,操作有2類 1 將節點a到節點b路徑上所有點都染成顏色c 2 詢問節點a到節點b路徑上的顏色段數量 連續相同顏色被認為是同一段 思路 樹剖之後,維護其兩端的顏色 答案和標記即可。include include define n 100001 using...
黑白棋遊戲
黑白棋遊戲 time limit 10000ms memory limit 65536k total submit 9 accepted 5 case time limit 1000ms description 問題描述 黑白棋遊戲的棋盤由4 4方格陣列構成。棋盤的每一方格中放有1枚棋子,共有8枚白...