日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

结论题

發布時間:2024/10/12 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 结论题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

JOHNKRAM?最近在研究集合。他從 $[1,2n]$ 中任選了 $n$ 個不同的整數,組成了 $\binom{2n}{n} $ 個不同的集合。現在他想知道,在這些集合中,有多少個集合含有偶數個偶數?答案可能很大,你只需要告訴他答案 $\text{mod}\ 1000003$ 的結果即可。

$n\le 10^{18}$ 。

題解

結論題+Lucas定理

結論:

1. 當 $n$ 為奇數時,答案為 $\frac{\binom{2n}{n}}2$ ;

2. 當 $n$ 為偶數且為 $4$ 的倍數時,答案為 $\frac{\binom{2n}{n}+\binom{n}{\frac n2}}2$ ;

3. 當 $n$ 為偶數且不為 $4$ 的倍數時,答案為 $\frac{\binom{2n}{n}-\binom{n}{\frac n2}}2$ ;

我不會證明...打表打出來的...

然后使用Lucas定理求組合數即可。

另外本題好像還可以用數位dp來做

1 #include <cstdio> 2 #define mod 1000003 3 #define inv2 500002 4 typedef long long ll; 5 ll fac[mod] , inv[mod] , fin[mod]; 6 ll C(ll n , ll m) 7 { 8 if(n < m) return 0; 9 else if(n <= mod) return fac[n] * fin[m] % mod * fin[n - m] % mod; 10 else return C(n / mod , m / mod) * C(n % mod , m % mod) % mod; 11 } 12 int main() 13 { 14 ll n; 15 int i; 16 fac[0] = fac[1] = inv[1] = fin[0] = fin[1] = 1; 17 for(i = 2 ; i < mod ; i ++ ) 18 { 19 fac[i] = fac[i - 1] * i % mod; 20 inv[i] = (mod - mod / i) * inv[mod % i] % mod; 21 fin[i] = fin[i - 1] * inv[i] % mod; 22 } 23 scanf("%lld" , &n); 24 if(n & 1) printf("%lld\n" , C(2 * n , n) * inv2 % mod); 25 else if(n & 2) printf("%lld\n" , (C(2 * n , n) - C(n , n / 2) + mod) * inv2 % mod); 26 else printf("%lld\n" , (C(2 * n , n) + C(n , n / 2)) * inv2 % mod); 27 return 0; 28 }

?

轉載于:https://www.cnblogs.com/lhsghhqgmzy/p/10686570.html

總結

以上是生活随笔為你收集整理的结论题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。