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

2022-05-31 17:57:12 字數 1295 閱讀 9658

description

input

output

sample input

4 25 35 15 45

40 20 10 30

sample output

4hint

輸入的2*n個數字保證全不相同。

還有輸入應該是第二行是糖果,第三行是藥片

組數多k組實際上已經告訴了你應該有多少組糖果大於藥片……

首先對它倆排個序,我們設\(f[i][j]\)表示前\(i\)組至少有\(j\)組糖果大於藥片,那麼轉移即為\(f[i][j]=f[i-1][j]+f[i-1][j-1]*max(k-j,0)\),\(k\)表示\(medicine_k

然後我們令\(g[i]=f[n][i]\times (n-i)!\),因為剩下的\((n-i)\)個可以任意匹配,所以我們得到了\(g[i]\)表示至少有\(i\)組糖果大於藥片的方案數

因此我們得到最終的答案為\(\sum\limits_^n (-1)^\times g[i]\times \binom\)

/*problem from wolfycz*/

#include#include#include#include#include#include#define inf 0x7f7f7f7f

using namespace std;

typedef long long ll;

typedef unsigned int ui;

typedef unsigned long long ull;

inline char gc()

inline int frd()

inline int read()

inline void print(int x)

const int n=2e3,p=1e9+9;

int candy[n+10],medi[n+10],fac[n+10];

int f[n+10][n+10],c[n+10][n+10];

void prepare()

}int main()

for (int i=m;i<=n;i++) ans=(ans+((i-m)&1?-1ll:1ll)*f[n][i]*fac[n-i]%p*c[i][m]%p+p)%p;

printf("%d\n",ans);

return 0;

}

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 的最後乙個...