題解 Hikari與組合數

2022-05-07 17:36:16 字數 1655 閱讀 8562

\(tairitsu\)給\(hikari\)出了乙個組合數的題

求出\(\begin\sum_^xc_^i*c_^\%998244353\end\)

hikari稍微想了想這不是個傻叉的楊輝三角嗎,但她看到資料範圍後就更懵逼了,於是她來尋求你的幫助。

第一行乙個整數\(t\)表示資料組數。

接下來\(t\)行,每行分別有三個整數\(x\),\(y\),\(z\)。

共\(t\)行對應\(t\)個詢問。

23 5 2

400 200 100

56282195585

cirno都能算的出來

對於\(10%\)的資料 \(t=10,x,y,z<=10\)。

對於\(30%\)的資料 \(t=10,x,y,z<=1000\)。

對於另外\(20%\)的資料滿足\(t=1,x,y,z<=1000000\)。

對於另外\(10%\)的資料滿足\(x=0\)。

對於另外\(10%\)的資料滿足\(x=1\)。

對於\(100%\)的資料滿足\(t<=10000,0<=x,y,z<=1000000\),且保證\(y>=z\)

範德蒙德卷積

\(\begin\sum_^k^}=c_^\end\)

從意義上理解即可,也就是從數量為\(n\)和\(m\)的兩個堆中一共選擇\(k\)個物品這兩個堆在實際意義上也可以不存在。

有了這個公式你就可以一步得到結論,最後就求\(\beginc_^\%998244353\end\)即可

常用結論:\(\begin\sum_^n^}=c_^\end\)

簡單的證明:

\(\binom=\sum_^\binom}=\sum_^\binom}=\sum_^\binom\binom\)

\(\begin\sum_^n^2=c_^\end\)

\(\begin\sum_^m}=c_^\end\)

讀者自證不難

#include#define ll long long

using namespace std;

/*grievous lady*/

template void read(t & t)

dowhile(ch >= '0' && ch <= '9');t *= f;

}#define mod 998244353

const int kato = 1e6 + 1;

ll yuni[kato * 2];

inline ll quick_pow(ll a , ll b)

}return res % mod;

}inline ll c(ll x , ll y)

return yuni[x] * quick_pow(yuni[y] * yuni[x - y] % mod , mod - 2) % mod;

}inline ll lucas(ll x , ll y)

ll t , x , y , z;

inline int ame_()

// cout << yuni[3] << ' ' << yuni[5] << ' ';

for(; t --> 0 ;)

return 0;

}

int ame__ = ame_();

int main()

組合數學 求組合數

對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...

交流 題解(容斥原理 組合數)

在此。給你n nn個字串,其中選擇k kk個,如果合法則將 變成字元 26 2626 個都可以,前提是合法 構成乙個只含小寫字母的字串,求可以變成多少種字串。合法要求 乙個位置上要不只有一種小寫字母,要不是 解法 可以用狀壓dpdp dp或者容斥原理 組合數完成。首先鋪墊三個內容 交集 並集 集合大...

題解 分特產 組合數 容斥

一道小水題。假如沒有這個要求每個人都要有乙個特產的限制我們直接可以組合數。我們又發現人 本質上 是沒有區別的,所以容斥的複雜度只有 o n n 個人分 m 個特產,每個特產有 a i 個,人可以不拿特產,的方案數就是把 a i 分成 n 份,而且可以分為 0 份。這個的答案就是 f n prod m...