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

2022-05-07 19:48:11 字數 1135 閱讀 3602

設\(a_i\)表示第\(i\)個糖果的能量,\(b_i\)表示第\(i\)個藥片的能量

首先可以得出滿足條件時,\(a>b\)的對數為\(\frac\)。

因為恰好為\(i\)的方案數不好求,我們先求出至少為\(i\)的方案數,之後用二項式反演求出答案。

先將\(a,b\)從小到大排序。

設\(h_\)表示前\(i\)個糖果,至少選了\(j\)對\(a>b\)的方案數,\(cnt_i\)表示比第\(i\)個糖果小的藥片數目。

有:\(h_=h_+(cnt_i-(j-1))*h_\)

設\(f_i\)表示恰好\(i\)對\(a>b\)的方案數,\(g_i\)表示至少\(i\)對\(a>b\)的方案數。

顯然有\(g_i=f_*(n-i)!\),之後二項式反演即可。

code:

#includeusing namespace std;

const int maxn=2010;

const int mod=1e9+9;

int n,m,ans;

int a[maxn],b[maxn],cnt[maxn],g[maxn],fac[maxn],inv[maxn];

int f[maxn][maxn];

inline int power(int x,int k)

return res;

}inline int c(int n,int m)

for(int i=0;i<=n;i++)f[i][0]=1;

for(int i=1;i<=n;i++)

for(int j=1;j<=i;j++)

f[i][j]=(f[i-1][j]+1ll*max(0,cnt[i]-(j-1))*f[i-1][j-1]%mod)%mod;

for(int i=0;i<=n;i++)g[i]=1ll*f[n][i]*fac[n-i]%mod;

for(int i=m;i<=n;i++)

if((i-m)&1)ans=(ans-1ll*c(i,m)*g[i]%mod+mod)%mod;

else ans=(ans+1ll*c(i,m)*g[i]%mod)%mod;

printf("%d",ans);

return 0;

}

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 已經沒有什麼好害怕的了 解題報告

已經使 tt 有簽訂契約,和自己一起戰鬥的想法後,tt 忽然感到自己不再是孤單一人了呢。於是,之前的謹慎的戰鬥作風也消失了,在對 tt 的傀儡使用終曲 tt 後,tt 面臨著即將被 tt 的本體吃掉的局面。這時,已經多次面對過 tt 的 tt 告訴了學 oi 的你這樣乙個性質 tt 的結界中有兩種具...

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...