題意簡述:在乙個\(1*n\)的棋盤上,有\(m\)個棋子.小\(a\),小\(b\)每次可以把乙個棋子向左移動若干格,但不能越過其他棋子.第乙個無法操作的人輸.問給定\(n,m\),有多少種局面使得\(小a\)必勝
\(n \leq 150000,m \leq 50\)
/*[sdoi2019]移動金幣*/
#includeusing namespace std;
#define ll long long
int read()
int n,m;
int t;
const int n = 3e5 + 10;
int dp[21][n];
int fac[n],invfac[n];
const int mod = 1e9 + 9;
#define t 19
int qpow(int x,int y)
return ans;
}void add(int &x,int y)
int c(int x,int y)
int calc(int bit,int s)
if(s < 0) return 0;
if(dp[bit][s] != -1) return dp[bit][s];
dp[bit][s] = 0;
for(int i = 0; i <= t; i += 2)
return dp[bit][s];
}int main()
ans = (1ll * fac[n] * invfac[m] % mod * invfac[n-m] % mod - ans + mod) % mod;
printf("%d\n",ans);
return 0;
}
移動金幣 SDOI2019
乙個 1 times n 的棋盤上最初擺放有 m 枚金幣。其中每一枚金幣佔據了乙個獨立的格仔,任意乙個格仔內最多只有一枚金幣。alice 和 bob 將要進行如下的一場遊戲。二人輪流操作,且 alice 先行。當輪到乙個玩家的時候,他可以選擇一枚金幣,並將其向左移動任意多格,且至少移動一格。金幣不能...
SDOI 2019 移動金幣 題解
題目傳送門 題目大意 乙個長度為 n nn 的序列上有 m mm 個金幣,兩個人輪流操作,乙個人可以將乙個金幣向左移動任意格,但是不能越過別的金幣,問有多少種局面先手必勝。感覺像這兩題 1,2 的合體,不過合的也很巧妙。轉化一下這個博弈 相當於有 m 1 m 1m 1 堆石子,每次可以將一堆石子中的...
SDOI 2019 快速查詢
傳送門 day1 t1 給定乙個長度為 n nn 的整數數列 有 q qq 次操作,操作有 6 66 種,分別為 單點賦值,全域性加,全域性乘,全域性賦值,單點查值,全域性求和。操作的讀入有點鬼畜啊,建議仔細讀一下。資料範圍 1 n 109 1 n 10 9 1 n 10 9,1 q 10 71 l...