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

2021-07-07 05:34:05 字數 1438 閱讀 6288

我好害怕這種題 φ(≧ω≦*)?

兩個陣列排序後,處理出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) 開始忘記max了。因為f[i][j]不一定都是合法狀態,所以要判一下。

套容斥:

ans[j]=f[n][j]*jie[n-j]-sigma(ans[k]*c[k][j])

總結一下,容斥原理對於等於k個的可以使用上面的公式,而不是+1-1.spring我算明白了?

吐槽一下,這題樣例也太強了吧,隨便怎麼寫都能過。

#include

#include

#include

#include

#include

#define md 1000000009

#define ll long long

#define inf (int) 1e9

#define eps 1e-8

#define n 2010

using namespace std;

int tang[n],yao[n],next[n];

ll f[n][n],c[n][n],jie[n];

int main()

k=(n+k)>>1;

for (int i=1;i<=n;i++) scanf("%d",&tang[i]);

for (int i=1;i<=n;i++) scanf("%d",&yao[i]);

sort(tang+1,tang+n+1); sort(yao+1,yao+n+1);

int w=1;

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

//for (int i=1;i<=n;i++) printf("%d ",next[i]); printf("\n%d\n",k);

f[0][0]=1;

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

for (int j=0;j<=n;j++)

f[i][j]=(f[i-1][j]+f[i-1][j-1]*max(next[i]-j+1,0))%md;

c[0][0]=1;

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

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

c[i][j]=(c[i-1][j]+c[i-1][j-1])%md;

jie[0]=1;

for (int i=1;i<=n;i++) jie[i]=(jie[i-1]*i)%md;

for (int i=n-1;i>=k;i--)

printf("%lld\n",f[n][k]);

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

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

已經使 modoka 有簽訂契約,和自己一起戰鬥的想法後 mami 忽然感到自己不再是孤單一人了呢.於是,之前的謹慎的戰鬥作風也消失了 在對 charlotte 的傀儡使用終曲 tiro finale後 mami 面臨著即將被 charlotte 的本體吃掉的局面.這時,已經多次面對過 charlo...