洛谷 P4859 已經沒有什麼好害怕的了 解題報告

2022-04-30 02:45:10 字數 2039 閱讀 3483

已經使\(\tt\)有簽訂契約,和自己一起戰鬥的想法後,\(\tt\)忽然感到自己不再是孤單一人了呢。

於是,之前的謹慎的戰鬥作風也消失了,在對\(\tt\)的傀儡使用終曲——\(\tt\)後,\(\tt\)面臨著即將被\(\tt\)的本體吃掉的局面。

這時,已經多次面對過\(\tt\)的\(\tt\)告訴了學\(oi\)的你這樣乙個性質:\(\tt\)的結界中有兩種具有能量的元素,一種是「糖果」,另一種是「藥片」,各有\(n\)個。在\(\tt\)發動進攻前,「糖果」和「藥片」會兩兩配對,若恰好糖果比藥片能量大的組數比「藥片」比「糖果」能量大的組數多\(k\)組,則在這種局面下,\(\tt\)的攻擊會丟失,從而\(\tt\)仍有消滅\(\tt\)的可能。

你必須根據\(\tt\)告訴你的「糖果」和「藥片」的能量的資訊迅速告訴\(\tt\)這種情況的個數.

第一行兩個整數\(n\),\(k\),含義如題目所描述。

接下來一行\(n\)個整數,第\(i\)個數表示第\(i\)個糖果的能量。

接下來\(n\)個整數,第\(j\)個數表示第\(j\)個藥片的能量。

保證上面兩行不會有重複的數字

乙個答案,表示消滅\(\tt\)的情況個數,要 \(\bmod (10^9 + 9)\)

對於\(100\%\)的資料:\(l\le n\le 2000,0\le k\le n\)

因為元素互不相同,所以我們可以得到應該有多少組糖果大於藥片,即為\(d=\frac\)

稱某個糖果\(i\)配對到比她少的藥品時為性質\(i\),則問題為有多少種配對方案滿足恰好有滿足\(d\)個性質

令\(f_i\)為恰好滿足\(i\)的性質的方案數,\(g_i\)為至少滿足\(i\)個性質的方案數。

如果研究過容斥原理,而不是只浮於套路的表面,你會明白\(g_i\)實際上是自交的,畫個\(\text\)圖簡單解釋一下

每乙個圓代表的方案集合為滿足某個性質\(i\)的方案集合。

例如\(f_2\)為顏色不深不淺的黃色部分,而\(g_1\)為三個圓的面積之和(它的中間有交)

有\[g_k=\sum_^n\binomf_i

\]解釋一下,對於至少\(k\)個元素的集合,有\(i\)個元素的集合被重複計算了\(\binom\)次

\[f_k=\sum_^n(-1)^\binomg_i

\]這裡就是在容斥了。

事實上上面的過程就是在進行二項式反演,不過我沒有研究過它的一些證明,所以只能將就的感性理解了。

為什麼要引入定義這麼容易誤導的\(g_i\)(反正我最開始學的時候一直搞不懂「至少」)呢?

因為\(\tt\)好算啊。

比如這個題,令\(dp_\)代表前\(i\)個遞增的糖果已經配對出了\(j\)對並且滿足\(j\)個性質的方案數,有轉移

\[dp_=dp_+dp_\times(p_i+1-j)

\]\(p_i\)代表糖果\(i\)大於多少個藥品,可以\(two-pointer\)也可以二分求

那麼就有

\[g_i=dp_\times fac_

\]code:

#include #include #define rep(i,a,b) for(int i=a;i<=b;i++)

#define dep(i,a,b) for(int i=a;i>=b;i--)

#define st(a,b) std::sort(a,b)

#define lb(a,b,c) std::lower_bound(a,b,c)-(a);

#define ll long long

const int n=2010;

const ll mod=1e9+9;

ll quickpow(ll d,ll k)

return f;

}ll dp[n][n],g[n],inv[n],fac[n],ans;

int m[n],c[n],p[n],n,k;

int main()

2018.10.23

P4859 已經沒有什麼好害怕的了

設 a i 表示第 i 個糖果的能量,b i 表示第 i 個藥片的能量 首先可以得出滿足條件時,a b 的對數為 frac 因為恰好為 i 的方案數不好求,我們先求出至少為 i 的方案數,之後用二項式反演求出答案。先將 a,b 從小到大排序。設 h 表示前 i 個糖果,至少選了 j 對 a b 的方...

P4859 已經沒有什麼好害怕的了

有 a 和 b 兩個長度為 n 的序列,其中元素兩兩配對,a b 的配對需比 a的配對多恰好 k 個,求方案數 我們設 f 為前 i 個 a 中,選了 j 組 a b 的方案數 可得狀態轉移方程 f f f l i j 1 l i 表示離 a i 最近的乙個 b 再設 g i 為 geq i 個的配...

P4859 已經沒有什麼好害怕的了(二項式反演)

顯然是恰好有 frac 組 a b 令 f i,j 表示前 i 個糖果,已經有 j 組 a b 剩下的沒管的方案數 對 a 陣列從小到大排序,設 r i 表示比 a i 小的 b 個數,那麼 r i 是遞增的 有狀態轉移方程 f i,j f i 1,j f i 1,j 1 times r i j 1...