這名字起的。。
題意:給出兩數列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大於的極大的藥片的id 為 nxt[i]
那麼在前i個裡面的, 至少有j個滿足條件,其餘的不管。
f[i][j] = f[i-1][j] + f[i-1][j-1] * (nxt[i] - (j - 1))
然後發現(a1
然後容斥otz
思想是看f[n][i]中多餘i個的多算了多少次。 /*
f[i,j] = f[i-1,j] + f[i-1, j-1] * (nxt[i] - j + 1)
g[i] = f[n,i] * (n - i)! - sigma(c[k,i] * g[k])[k=[i+1,n]]*/
同bzoj舞會
#include
#define maxn 2010
using namespace std;
int n, k, a[maxn], b[maxn];
int f[maxn][maxn], g[maxn], c[maxn][maxn], fac[maxn], nxt[maxn];
const int p = 1e9+9;
#define plus plus
int plus(int x, int y)
int dcrs(int x, int y)
int mul(int x, int y)
int main()
k = n + k >> 1;
for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);
for(int i = 1; i <= n; i ++) scanf("%d", &b[i]);
sort(a+1, a+1+n);
sort(b+1, b+1+n);
c[0][0] = 1;
for(int i = 1; i <= n; i ++)
int j = 0;
for (int i = 1; i <= n; i ++)
f[0][0] = 1;
for(int i = 1; i <= n; i ++)
}fac[0] = 1;
for(int i = 1; i <= n-k; i ++)
fac[i] = 1ll * fac[i-1] * i % p;
for(int i = n; i >= k; i --)
printf("%d\n", g[k]);
return 0;}/*
f[i,j] = f[i-1,j] + f[i-1, j-1] * (nxt[i] - j + 1)
g[i] = f[n,i] * (n - i)! - sigma(c[k,i] * g[k])[k=[i+1,n]]
*/
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 開始忘...
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 的最後乙個...
BZOJ3622 已經沒有什麼好害怕的了
已經使 modoka 有簽訂契約,和自己一起戰鬥的想法後 mami 忽然感到自己不再是孤單一人了呢.於是,之前的謹慎的戰鬥作風也消失了 在對 charlotte 的傀儡使用終曲 tiro finale後 mami 面臨著即將被 charlotte 的本體吃掉的局面.這時,已經多次面對過 charlo...