HDU多校
posted on 2025-07-22 13:03:38 | under | source
前言
非常欢乐(痛苦)的 HDU 多校,基本每一场赛后都看懂了题解,但是没时间(懒)去写博客了,所以内容非常残缺,看个乐子吧。
概况
队长 larsr,队员我、lsy、sst、yfz。
多校 2
开题!成功分配到了 C、D 两坨大的,想了一会感觉会 C 了,结果败在了比大小上。给队伍贡献 6 发罚时!
大家只通过了签到题,共过 5 题!打成屎了。
B、F、H、I、L
签到题,没啥好说的。
A 骰子
分圆多项式。
C 图上的数
就差一点呜呜呜。
设 \(m\) 为路径的边数,\(\sum p\) 为边权,那么期望 \(\frac {2^m-1}m\sum p\),要最大化这个东西。
只考虑边权和为正。注意到前半部分增长很快,意味着只需考虑最大边数 \(mx\) 往前 \(50\) 个。那么跑拓扑排序时,对于一个点为结尾的所有路径,保留正边权和的最大的 \(50\) 个,以及边数最多的边权为 \(0\) 的路径即可。
问题来到比大小!看作判断 \((2^a-1)b<(2^x-1)y\)。
化式子:
不妨令 \(a\ge x\):
右边至多 \(10^{14}\)。这个形式就比较好判断了,做巨大分讨即可。
所以不要相信 AI,还是自己推吧。
D 子串的故事(2)(不会)
E 循环位移
值得注意的是,\(x\) 应为偶数否则无法改变逆序对奇偶性。
一次操作会使得开头元素右移 \(x-1\) 位,其他元素左移一位。那么对于最大值,可以将其不断右移 \(x-1\) 位,最后若位置不够了就左移再右移。按照这个方法,可以使得前 \(n-x+1\) 大的元素归位。对于第 \(i\) 大的元素,期望操作次数为 \(\frac 12\sum\limits_{i\in [x,n]} (\frac ix+x)\)。
对于剩下 \(x-1\) 个元素,先探究如何只交换开头两个元素,经过打表发现:先以 \(2\) 为开头操作一次,然后依次以 \(2,1\) 为开头操作共 \(x\) 次。
证明:\(2\) 先被移到 \(x+1\),然后吃满每个操作被移到 \(1\);\(1\) 除开始两个操作都吃满被移到 \(2\);\(3\dots x+1\) 中的奇数会被移动 \(x\) 次且不经过 \(1\),最终不变;偶数同理。
那么交换 \(1,i\) 就很容易了,让 \(i\) 移到 \(2\) 然后做上述操作,再将 \(1\) 复位到 \(i\) 即可。期望 \(\frac 12(x-2)(2x+1)\)。
差不多取 \(x\) 为 \(\sqrt n\) 可过。
所以有的时候要耐心打表观察。
G 计数
考虑朴素 dp,记 \(F_i(x)\) 为考虑 \(i\dots n\) 且 \(b_i=x\) 的方案。转移显然:
这相当于滚了一遍前缀和,归纳得 \(F_i\) 是 \(n-i\) 次多项式。
套路:二项式系数基。将多项式记为如下形式,其中 \(c_{i,k}\) 是系数:
推式子:
交换求和顺序以便使用朱世杰恒等式:
把 \(x+1\) 拆掉:
然后分别向 \(k,k+1\) 项贡献即可,后面这个东西可以看作向 \(0\) 项贡献。大力维护就是 \(O(n^2)\)。
赛时一眼认出划艇,然后走上了一条不归路,所以不要过度联想以前见过的题,而忽略了新的想法。
“二项式系数基”的套路可以记下来。
多校 7
战况:8 题,rk21,最高的一次。1001 差点不会。1007 花最后 1h 写结果太困了犯下弱智错误,没过。1012 想的做法过于复杂了,不想写。这次太困了全程随机开题。
多校 8
战况
9 题,rk35。这场出的一坨,放暴力过、快结束了改数据范围、还有题解瞎讲。
过了 1006(F),然后帮 sst 想了 E、J 做法。后面在想 1012。
忽略掉一些比较简单的题。
1012 最多变的序列
题意:给你排列,可以进行任意次将区间元素替换为区间最小值,求最终序列可能情况数。\(n\le 3\times 10^3\)。
这很 atcoder。考虑找充要条件,显然有所有值为 \(x\) 对应的下标构成一个连续段,并且是原来 \(x\) 的极大管辖区间的子区间(满足区间元素都 \(>x\))。然后发现对于 \(a_x<a_y\),最终 \(a_x\)、\(a_y\) 对应的连续段的相对位置不能变,也就是说去重后是原来的子序列。
貌似够了,不难构造方案证明其充分性。然后直接 dp 即可,\(O(n^2)\)。
启示:一时半会看不出充要条件,要耐心找必要条件逐渐缩小范围。不能随便套用之前题面的做法,就是因为这个想了很久区间 dp。
1004 最糖的题目
题意:给你序列 \(a,b\) 和 \(k\),求能否对两个序列进行任意次对 \(k\) 长度的子区间进行循环位移,使得 \(a,b\) 相同。
首先特判掉 \(k=1,k=n\) 的情况,同时元素出现次数必须相同。
根据之前一场有个叫循环位移的题,当 \(k\) 为偶数时必然有解。
然后考虑 \(k\) 为奇数,先考虑排列,此时不能更改序列逆序对奇偶性,大胆猜测充要条件为逆序对奇偶性相同。实际上也能构造证明。不为排列相当于可对相同元素任意标号,可随意改变奇偶性使其合法。
关于证明,首先套用循坏位移做法,可将元素依次归位直到剩下 \(k-1\) 个元素。题解说当 \(>2\) 个元素也能归位,根据群友说法,有办法将前三个数循环位移,应该对。
1002 不最近的路
题意:记路径权值为其前 \(k\) 大边权之和(可能没有 \(k\) 条),求次短路。
前 \(k\) 大之和难以通过状态转移描述,但边数不多,考虑枚举第 \(k\) 大边权 \(=p\)。问题变成怎么只算入第 \(k\) 大边权恰为 \(p\) 呢?
下一步非常巧妙:令所有边 \(w\gets \max(0,w-p)\),跑最短路,最后再 \(+kp\)。这基于一个思想:放宽限制。但确保每种路径在其第 \(k\) 大边权时被正确算入,其它情况答案偏大。记 \(q\) 为路径实际第 \(k\) 大边权,证明如下:
- \(q=p\):正确。
- \(q<p\):此时其 \(<p\) 的若干前 \(k\) 大边权会算错,被算大为 \(p\)。
- \(q>p\):此时其 \(\ge p\) 的非前 \(k\) 大边权会被错误地算入,也是偏大。
那么跑 \(m\) 次最短路即可。
多校 10
战况
终 局 之 战。6 题罚时拉满,rk11,曼巴差一点调出 1008。自己做了 1007、1012.
1001 Submission
转化一下,看成一个优先队列,每次不删去队尾而是只看队头 \(k\) 个元素。那么容易发现,一个人在队列里的出现时间必然是一段区间(先插入、然后逐步被挤走)。
注意细节:每一轮先插入计算答案、再删去。所以一个人的贡献即为出现次数减去区间内他的出现次数,那么不妨令区间右端点为这个人的位置,而左端点又必为他第一次出现的位置,所以区间个数 \(O(n)\)。
考虑算答案,从区间的角度出发,判断合法性。那么发现必要条件是每个间隔(而非点)被区间覆盖的次数 \(\le k\)。也易证明充分性,考虑让对区间连边来刻画优先级大小,那么只可能左往右连,于是是 DAG 有方案。
然后要让区间代价(区间内元素个数)最大化,这是经典费用流问题。等价于可以将区间分为 \(\le k\) 组,每组的区间不交。而相同左端点区间只能选一个可用虚点刻画。
最后要对每个 \(k\) 求答案,将 \(i\to i+1\) 的边容量设为 \(m\),每次走一条增广路即可。\(O(n^2\log n)\)。可桶排去掉 \(\log\)。

浙公网安备 33010602011771号