2017 Chinese Multi-University Training, BeihangU Contest
链接
| A | B | C | D | E | F | G | H | I | J | K | L |
|---|---|---|---|---|---|---|---|---|---|---|---|
| \(\color{green}{\texttt{+}}\) | \(\color{green}{\texttt{+2}}\) | \(\color{green}{\texttt{+3}}\) | \(\color{red}{\texttt{+1}}\) | \(\color{gray}{\texttt{+}}\) | \(\color{gray}{\texttt{+3}}\) | \(\color{green}{\texttt{+}}\) | \(\color{gray}{\texttt{+}}\) | \(\color{gray}{\texttt{+}}\) | \(\color{gray}{\texttt{+}}\) |
A. Add More Zero
K. KazaQ's Socks
B. Balala Power!
L. Limited Permutation
签到题。
C. Colorful Tree
赛时想了一个很 simple 的做法:考虑点分,每种颜色分开处理贡献,一个点有贡献当且仅当其到点分中心路径上没有同色点。贡献可以通过容斥算出。复杂度 \(O(n\log n)\),卡一卡常可以通过。
标算给的是对每种颜色维护一个序列表示所有该颜色对应子树和,dfs 过程中维护。
F. Function
手模一下可以发现 \(a\) 中每个置换环需要映射到 \(m\) 中一个置换环,并且环长是倍数关系。
将 \(m\) 里所有的环长找出来,可以求出 \(n\) 的每个长度的置换环可行匹配数,相乘即可。
H. Hints of sd0061
毛估估一下可以发现 \(b\) 总共只有 \(O(\log n)\) 个取值。并且所有本质不同询问的和是 \(O(n)\) 的。所以直接调用库函数的 nth_element ,由于 \(a\) 数组是随机的,能期望在 \(O(n)\) 时间解决。
J. Journey with Knapsack
首先额外 \(m\) 物品先不管,假如前面的物品总大小为 \(i\) 的方案数为 \(f_i\),那么最后就是 \(\sum f_{2n-b_i}\)。
对于前面的部分,考虑生成函数:
前面的式子只有 \(O(\sqrt n)\) 项有值,直接暴力卷上去即可。后面是经典的拆分数,可以直接用五边形数处理,然而事实上可以直接根号分治,对于前 \(O(\sqrt n)\) 暴力 dp,对于后面整体转移 \(O(\sqrt n)\) 遍即可。
复杂度 \(O(n\sqrt n)\)。
I. I Curse Myself
首先把所有环取出来,每个环可以删一条边。这样问题转化成:给定若干组物品,每组选恰好一个,问第 \(k\) 大的选择是什么。
一个显然的想法是直接将每组物品排序,用 \(n\) 元组 \((i_1,i_2,\cdots,i_n)\) 表示每组物品的最大值,每次取出最大的物品然后每组物品分别向后增广 \(1\),可以得到 \(n\) 个可能的待选值。这样时间复杂度是 \(O(nk)\),但是空间也是 \(O(nk)\),不大行。
考虑换种思路,依次处理每组物品,维护一个堆表示此时前 \(k\) 大的物品。转移的时候类似记录,复杂度 \(O(nk\log n)\),空间 \(O(n+k)\) 的。事实上仔细分析可以发现设 \(c_i\) 为第 \(i\) 个环长,复杂度为 \(O(k\sum\log c_i)=O(k\log(\prod c_i))=O(k\log 2^n)=O(nk)\)。
D. Division Game
由于所有石子堆是相同的,令 \(f(x)\) 表示一堆石子取 \(x\) 次后恰好取完的方案数。可以发现无论何时都可以将一堆石子取至一颗,所以 \(x\) 次没有取完的方案数就是 \(f(x+1)\)。这样对于第 \(i\) 堆石子的答案就是 \(f(x+1)^{i-1}f(x)^{k-i+1}\)。
考虑求出 \(f\)。相当于是有 \(m\) 堆石子,第 \(i\) 堆是 \(e_i\),每次至少取一颗,问 \(x\) 次取完的方案数。
如果没有每次至少取一颗的限制,方案数可以对每堆石子分开计算,即:
对于每次至少取一颗的限制可以容斥,得到式子为:
这可以看作卷积,而 \(985661441\) 恰好是 NTT 模数。设 \(n=\sum e_i\),复杂度 \(O(n\log n)\)。

浙公网安备 33010602011771号