【BZOJ3622】已經沒有什麼好害怕的了
阿新 • • 發佈:2018-11-16
題目大意
對於兩個數列\(a,b\),求有多少種排列\(p,q\)滿足\(a_{p_i}>b_{q_i}\)的個數恰好為\(k\)
題目分析
由“恰好”引發思考。
考慮容斥。
設詢問函式\(q(i)\)表示欽定\(i\)個\(a>b\)的關係的方案數。
再設貢獻函式\(g(i)\)表示有i個\(a>b\)關係的方案對答案的貢獻。
再設容斥係數\(f(i)\),使得最終答案為\(\sum_{i=k}^nq(i)* f(i)\)
首先考慮如何快速求出詢問函式\(q(i)\)。首先將兩個數列分別排序。設\(dp[i][j]\)表示\(a\)數列前\(i\)個數的匹配關係處理後,欽定了\(j\)
\(dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(pos-j+1)\)
那麼\(q(i)=dp[n][i]* (n-i)!\)就能快速求出了。
再考慮求出容斥係數。
根據套路,我們可以\(O(n^2)\)遞推這玩意兒。
根據容斥原理,\(g(x)=\sum_{i=k}^x\dbinom{x}{i}f(i)\)。
當\(x=k\)時,\(g(x)=1\),那麼顯然\(f(x)=1\)
當\(x>k\)時,\(g(x)=0\),則有:
\(\sum_{i=k}^x\dbinom{x}{i}f(i)=0\)
\(\sum_{i=k}^{x-1}\dbinom{x}{i}f(i)+f(x)=0\)
\(f(x)=-\sum_{i=k}^{x-1}\dbinom{x}{i}f(i)\)
這樣我們就能遞推求出容斥係數了。時間複雜度\(O(n^2)\)。