牛客挑戰賽30D 小A的昆特牌(組合數學)

2022-02-27 09:43:48 字數 890 閱讀 6916

傳送門

很容易寫出乙個暴力

\[\sum_^r

\]即列舉選了多少個步兵,然後用插板法算出方案數

我們對這個換一種角度考慮,可以看做是從\((0,0)\)走到\((s,n+m)\),且必須經過\((l,n),(r,n)\)這條直線的方案數

這個就等價於第\(l\)步向右走時縱座標在\((0,n-1)\)的方案數減去第\(r+1\)步向右走時在\((0,n-1)\)的方案數

ps:關於第\(p\)步向右走時在\((0,n-1)\)的方案的計算的話,我們列舉一下就行了,即為

\[\sum_^

\]其中前面是\(p-1+i\)是因為最後一步強制向右走

//minamoto

#include#define r register

#define fp(i,a,b) for(r int i=(a),i=(b)+1;ii;--i)

#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)

using namespace std;

const int n=2e7+5,p=998244353;

inline int add(r int x,r int y)

inline int dec(r int x,r int y)

inline int mul(r int x,r int y)

int inv[n],f[n],g[n];

int n,m,s,l,r;

int calc(r int p)

fp(i,0,n-1)res=add(res,mul(f[n+m-i],g[i]));

return res;

}int main()

牛客挑戰賽30 A 小G數數

思路 先考慮中間b,c的情況,bac,我們先找出所有滿足b,c的情況並存到陣列裡,注意陣列大小 然後,對於每對b,c,求出可以的aa和ad數量,相乘得到針對這對b,c的所有可能 然後所有結果相加。如下 include include include include include include i...

牛客挑戰賽30 A 小G數數

給你乙個1 n的排列a1,a2.ana1,a2.an,問有多少個四元組 a,b,c,d 滿足a b c d且aa示例1 複製4 1 3 2 4複製 1思路 這道題暴力也可做出來,夠毒瘤的,不過暴力是不夠的,應該用dp,定義f i j 表示第j個位置比i小的數的數量,然後雙迴圈遍歷陣列。include...

牛客挑戰賽30 T3 小G砍樹

link 題目大意 n個節點的帶標號無根樹。每次選擇乙個度數為1的節點並將它從樹上移除。問總共有多少種不同的方式能將這棵樹刪到只剩 1 個點。兩種方式不同當且僅當至少有一步被刪除的節點不同。題解 先考慮1號店最後移除時候的貢獻,我們可以欽定1號點為根,並欽定他最後移除 然後就是乙個樹形dp 設 f ...