解題 BZOJ 3622 已經沒有什麼好害怕的了

2022-10-10 15:18:10 字數 972 閱讀 1762

題面

用來學習二項式反演的題目

大於等於/小於等於 反演出 恰好等於

設前者為f(n),後者為g(n),則有$f(n)=\sum\limits_^nc_n^ig(n)g(n)=\sum\limits_^n(-1)^ic_n^if(i)$

這裡我們$n^2$地dp求出$f(i)$表示a>b的組數大於等於i的方案數然後套二項式反演即可。設$dp[i][j]$表示前i個物品產生了j組a>b的配對的方案數,那麼$dp[i][j]=dp[i-1][j]+(lst-j+1)*dp[i-1[j-1]$,其中lst表示b中小於a_i的數的數目,最後$f(i)=dp[n][i]*(n-i)!$。

1 #include2 #include3 #include4

using

namespace

std;

5const

int n=2005,mod=1e9+9;6

intn,m,ans,a[n],b[n],lst[n];

7int

f[n],g[n],fac[n],inv[n],dp[n][n];

8void add(int &x,inty)9

14int qpow(int x,int

k)15

20int c(int a,int

b)21

24void

pre()

2531

intmain()

3244

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

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

46 add(ans,(((i-m)&1)?-1ll:1ll)*c(i,m)*g[i]%mod);

47 printf("%d"

,ans);

48return0;

49 }

view code

bzoj 3622 已經沒有什麼好害怕的了

我好害怕這種題 兩個陣列排序後,處理出next i 表示滿足tang i yao j 的最大的j。f i j 前i種糖果,有j個糖比藥多,不考慮剩餘情況的方案數 也就是剩餘n j個糖果的放法算一種,最後乘上階乘。f i j f i 1 j f i 1 j 1 max next i j 1,0 開始忘...

BZOJ 3622 已經沒有什麼好害怕的了

這名字起的。題意 給出兩數列a,b都有n個元素,元素兩兩互不相同,問有多少種方案使得恰好 a i b j 的數目 a i b j 的數目 k?轉化 恰好有a i b j 的數目 n k 2 如果n k為奇數無解。link here 蒟蒻連普通dp也想不到啊otz 首先將糖果藥片們排序 設糖果i大於的...

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

題意 給定兩個長度為n的互不相同的序列,將其兩兩配對,求有多少種配對使得a i b i 的對數減去其他對數恰好為k。一道經典的計數題,但思路理清後發現並不算難。首先設x為a i 小於b i 的對數。x x k n 2 x n k 所以當n k為奇數,答案為0。先令ne i 表示小於a i 的最後乙個...