JZOJ A組 球 題解

2022-05-01 13:24:06 字數 2399 閱讀 8544

球(ball)

【問題描述】

小 t 有 n 個桶和 2n − 1 個球,其中第 i 個桶能裝前 2i − 1 個球。每個桶只能裝乙個球。

現在小 t 取了 m 個桶和 m 個球,並將這些球各自放在這些桶裡。問這樣的方案有多少。

兩種方案不同當且僅當選擇了不同的桶或球或者同乙個桶在兩種方案放了不同的球。

由於方案的數量可能很大,所以只需要求方案數模 998244353 後的結果。

【輸入格式】

從輸入檔案 ball.in 中讀入資料。

第一行乙個整數 t,表示資料組數。

接下來 t 行,每行兩個整數 n, m,含義見【問題描述】。

【輸出格式】

輸出到檔案 ball.out 中。

輸出共 t 行,每行乙個整數表示一組資料的答案。

【樣例 1 輸入】

41 1

2 12 2

3 2【樣例 1 輸出】14

218【樣例 1 說明】

對於 n = m = 1 的情況,只有選擇第乙個球和第乙個桶,並將第乙個球放在第乙個桶裡這一種方案。

對於 n = 2, m = 2 的情況,會選擇所有桶,第乙個桶裡放的一定是第乙個球,於是第二個桶裡可以放第二個或第三個球,共兩種方案。

【樣例 2 輸入】

41000 1

10000 1

100000 1

1000000 1

【樣例 2 輸出】

1000000

100000000

17556470

757402647

【子任務】

保證 1 ≤ t ≤ 1e5, 1 ≤ m ≤ n ≤ 1e7。

首先看到\(10^7\)的資料和僅有2個引數的較多詢問,馬上想到這是一道和預處理階乘有關的題。

然後看題目,是一道計數題,結合前面的想法,預估是一道數學題,且很可能是結論題

然後就分析一下,桶可以選擇的球的區間存在包含關係,前面的桶選擇乙個球放入後,後面的桶可選擇的球就會減1,用式子表達即

\[ans= \sum_^n \sum_^n \sum_^n ... \sum_+1}^n (2 i_1 - 1)(2 i_2 - 2) ... (2i_m - m)

\]對這種變數不重複的列舉方式,有乙個常用的化法,就是反過來列舉,使每個變數的下界為\(1\),方便後續化簡

\[\sum_^ \sum_ = m-1}^ \sum_ = m-2}^ -1} ... \sum_ = 2}^ -1} \sum_ = 1}^ -1} (2 i_1 - 1)(2 i_2 - 2) ... (2i_m - m)

\]直接把每一項提出去得

\[\sum_^ (2i_m - m) \sum_ = m-1}^ (2i_ - (m-1)) ... \sum_ = 2}^ -1} (2 i_2 - 2) \sum_ = 1}^ -1} (2 i_1 - 1)

\]emm然後發現,這樣的式子,從末尾開始,每乙個求和都只與前乙個求和給的變數有關,如果我們對最後乙個求和預處理一下,然後用它來處理倒數第2個求和,然後用這來出來倒數第3個求和......處理到最後就是答案了!

實現就乙個二維的dp

\[f(0,j) = 1 \\

f(i,i-1) = 0 \\

f(i,j) = f(i,j-1) + (2j-i)f(i-1,j-1)

\]那麼,最終答案就是\(f(m,n)\)

這樣就可以獲得70分

觀察推出來的式子,是不是挺像組合數的遞推式?

考慮打錶出\(f\)矩陣找規律

發現\(f(i,i) = i!\),對每行都除掉他

發現每乙個數字都是完全平方數,開方後就成為乙個近似楊輝三角的東西

於是愉快的發現了規律。

\[ans = m! (c_n^m)^2

\]

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const ll mod=998244353;

ll qpow(ll x,ll up)

ll inv(ll x)

const ll mxn=1e7+5;

ll fac[mxn];

ll facinv[mxn];

void spawnfac(ll sz)

ll c(ll n,ll m){

if(n這個結論題還是蠻有意思的,推導套路值得思考

關於該結論的證明:

反正我是沒有看懂(

JZOJ A組 量子糾纏

第一行包含乙個正整數 m,代表運算元。接下來 m 行,每行可能有以下形式 1 s 代表將數字串 s 加入資訊集中 2 s 代表詢問數字串 s 是否在資訊集中 3 a b 代表使數字串 a 和 b 互相糾纏 對於每乙個 2 操作,如果詢問串不在集合中,請輸出一行乙個整數 0,否則輸出一行乙個整 數 1...

JZOJ A組 跳樓機

djl為了避免成為乙隻鹹魚,來找srwudi學習壓 的技巧。srwudi的家是一幢h層的摩天大樓。由於前來學習的蒟蒻越來越多,srwudi改造了乙個跳樓機,使得訪客可以更方便的上樓。經過改造,srwudi的跳樓機可以採用以下四種方式移動 1 向上移動x層 2 向上移動y層 3 向上移動z層 4 回到...

JZOJ A組 傳送門

8102年,normalgod在glados的幫助下,研製出了傳送槍。但glados想把傳送槍據為己有,於是把normalgod扔進了一間實驗室。這間實驗室是一棵有n個節點的樹。現在normalgod在一號節點,出口也在一號節點,但為了開啟它,必須經過每乙個節點按下每個節點的開關,出口才能開啟。gl...