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