CSP 模拟1
随
考场上一开始没意识到每次乘完要取模,直接想出来个 \(\dfrac{(\sum a_i)^m}{n^m}\) 的答案,然后仔细读了题,写了个矩阵快速递推就不想了(矩阵乘还写挂了)
发现每次是独立的,而且是与模数相关,可以类似快速幂的思路倍增处理,算出 \(2^i\) 时的答案,如果 \(2^i\) 在 \(m\) 的二进制表示中,则统计进总的答案,大概把快速幂中的乘换成更新操作就好了
单
考场上是正确思路,考虑相邻两个节点之差,但不清楚为什么思路没有引向正解
由 \(a\) 求 \(b\) 是显然的,直接换根 dp 两次 dfs 即可
由 \(a\) 求 \(b\) 的思路能导向由 \(b\) 求 \(a\)
考虑换根 dp 中从父亲 \(f\) 转移到儿子 \(x\) 的差值为 \((sum-siz_x)-siz_x\),其中 \(siz_x\) 为以 \(x\) 为根的子树中 \(a_i\) 的和,\(sum\) 为所有 \(a_i\) 的和,假设以 1 为根,那么 \(b_1=\sum_{i=2}^n siz_i\),与前边式子联立可解得 \(sum\),进而就可解得 \(siz_i\),然后解的 \(a_i\)
题
简单组合题,最后十多分钟才开始做,越做越急:
最后只做了 3 个任务
- 因为最后回到原点,所以左右和上下的数量相等,计算 \(\sum_{i=0}^{\frac n2}\binom{n}{i,i,\frac n2-i,\frac n2-i}\) 即可
- 卡特兰数定义,咋算都行
- 直接 \(O(n^2)\) dp 即可
- 把左下和右下看成 \(1\) 和 \(-1\),发现左右和上下都满足卡特兰数的定义,再把左右和上下随便排列即可,式子为 \(\sum_{i=0}^{n/2}C_{i}C_{\frac n2-i}\binom{n}{n-2i}\)
DP搬运工 1
定义 dp 数组 \(f_{i,j,k}\) 的意义如下:
选到 \(i\) 时有 \(j+1\) 个连续段(或有 \(j\) 个空位)并且相邻最大值之和为 \(k\) 的方案数
答案显然就是 \(\sum_{i\le k}f_{n,0,i}\)
考虑如何转移第 \(i\) 个数:
- 直接接在最后一个连续段后面(或第一个前面),对 \(j\) 无影响,对 \(k\) 产生 \(i\) 的贡献
- 在最后一个连续段后边加一个空位,然后接在这个空位后面(或在第一个连续段前面加一个空位,然后接在前面),相当于多了一个连续段,对 \(j\) 产生 \(1\) 的贡献,对 \(k\) 无影响
如果有空位:
- 替换空位,对 \(j\) 产生 \(-1\) 的贡献,对 \(k\) 产生 \(2i\) 的贡献,有 \(j\) 种选择
- 接在空位边上,对 \(j\) 无影响,对 \(k\) 产生 \(i\) 的贡献,有 \(2j\) 种选择
- 将空位拆成两个然后把 \(i\) 放在中间,对 \(j\) 产生 \(1\) 的贡献,对 \(k\) 无影响,有 \(j\) 种选择