C. Triple
题意
给三个序列,分别从中选取一个数,输出能够构成一个三角形(线段也算)的方案数。
题解
使用 $FFT$ 减去不符合条件的方案
代码
1 | typedef complex <double> cp; |
D. Counting Sequences I
题意
输入一个 $n$ ,问长度为 $n$ 的数列,满足 $a_1+a_2+\cdots+a_n=a_1\times a_2\times\cdots\times a_n$ 的方案数。
题解
这样的序列满足 $1$ 的数量为 非 $1$ 部分的乘积减去非 $1$ 部分的和,我们只需要枚举非 $1$ 部分就可以了
设序列有 $k$ 种数,每种数有 $c_i$ 个,则方案数为 $\huge C_{n}^{c_1}\times C_{n-c_1}^{c_2}\times\cdots\times C_{n-c_1-\cdots-c_{i-1}}^{c_i}\times\cdots\times C_{c_k}^{c_k}$
代码
1 | ll qPow(ll a, ll b, ll c) { //求(a^b) % c |
F. Rhyme scheme
题意
对 $n$ 个元素划分集合,每一种划分对应一个长度为 $n$ 的字符串,对这 $B_n$ 个字符串按字典序排序,问第 $k$ 个是什么。
如 $n=3$ 时,字符串为 $AAA,AAB,ABA,ABB,ABC$
题解
设 $dp[n][i][j]$ 表示对于 $n$ 个元素,前 $i$ 个元素被分为了 $j$ 个集合,剩余 $n-i$ 个元素划分集合的方案数。
然后再在字典树上查找答案就可以了
代码
1 | __int128 dp[30][30][30]; |
J. Stone game
题意
$n(1\le n\le300)$ 堆石子,每堆石子有 $a_i(1\le a_i\le 500)$ 个,问有多少种取法使得取走的数量大于等于剩余的数量而且按这种取法丢弃掉任意一堆都将会小于等于剩余的石子数
题解
对石子数从大到小排序, $dp[i]$ 表示总共取 $i$ 的方案数
代码
1 | ll dp[N]; |