多校A层冲刺NOIP2024模拟赛21
T1 送信卒
签到题
答案显然具有单调性,考虑二分答案,然后使用跑 dj check。
时间复杂度 \(O(nm\log (nm)\log (V))\)
T2 共轭树图
特殊性质,树形 DP
考虑链怎么做,注意到一个性质,一条链上产生在 \(G\),将 \(G\) 中的边放到原树上是不交的,证明考虑反证法构造一个嵌套形式的边是不可能的。
考虑 DP,设 \(f_{x,i}\) 表示考虑以 x 为根的子树,\(x\) 可以考虑向上连 \(i\) 个祖先,注意祖先不一定相邻,但是不相邻是不影响方案数的。
转移考虑从下向上枚举祖先转移即可。
直接转移是 \(O(n^3)\),优化考虑 \(f_{x,i}\) 与 \(f_{x,i+1}\) 和式之间只会相差一项,可以前缀和优化。
这样时间复杂度就能降低到 \(O(n^2)\)。
T3 摸鱼军训
特殊性质,手模,线段树二分
记 \(p_x\) 为 \(x\) 最初的位置。
对于一个询问考虑三种情况。
-
\(k>n-x\),此时答案显然为 \(x\)。
-
\(k\le cnt_{在 x 之前大于 x 的个数}\),此时答案为 \(p_x-cnt\),证明考虑冒泡排序是一个指针维护前缀最大值。
-
\(k>cnt\),首先会进行第二种情况,记 \(k=k-cnt\),此时情况比较复杂,考虑简化一下问题,此时只用考虑与 \(x\) 相比较的大小关系,将小于 \(x\) 看作 \(0\),将大于 \(x\) 看作 \(1\),手模一下发现每次冒泡排序会减去 \(x\) 后面第一个 \(1\),且其他的相对位置不变,所以可以考虑线段树上二分找到位置。
由于第三种情况的问题转化,得离线下来从大到小解决问题。
线段树需要支持单点加,单调求和,树上二分。
时间复杂度为 \(O(n\log n)\)。
T4 神奇园艺师
计数题,组合数学,优化式子
注意到每个集合的每个质数的贡献是独立的,且只与指数有关。
考虑怎么计算一个集合的一个质数的贡献。
因为贡献为 \(\min\{\sum_i|r_i-p|\}\),经典结论 \(p\) 为中位数,证明考虑随便选一个位置然后移动计算贡献变化量。
这样太傻了,考虑拆贡献,由于 \(p\) 为中位数,所有小于 p 和大于 p 的个数相等,所以能两两匹配构成一个线段,而这两个的贡献和就为这个线段的长度,所以可以考虑前缀和差分拆贡献,即在中位数左边的贡献为 \(-r_i\) 在中位数右边的贡献为 \(r_i\)( 这样如果没有这个质因子,则不会有贡献 ),考虑分开讨论这两种情况,然后可以枚举两侧的个数乘上组合数即可。这样就能得到一个 \(O(n^3)\) 的做法。
考虑推式子优化。
上式为
两个和式的关联太弱了,考虑分讨一种 \(a,b\) 之间的关系然后枚举它们之间的差值( 设为 \(d\) )。
以下为 \(a<b\) 的情况,省略了贡献
同理可以推出 \(a>b\) 的方案数为 \(\sum_{d=}^{i-2}\binom{n-1}{d}\)。
发现上指标不变,所以可以前缀和预处理组合数。
设 \(s_i=\sum_{d=0}^i\binom{n-1}{d}\),则贡献为 \(r_i(s_{i-2}-s_{n-i-1})\)。
由于是指数不会太大,可以使用桶排。
时间复杂度为 \(O(n\log n)\)。