2019牛客暑期多校训练营(第六场)
A.Garbage Classification
solved by F0_0H 20min
签到
B.Shorten IPv6 Address
solved by F0_0H 200min -4
题意 自己读
做法
- 本也是一道签到题,但被治了
- 需要特殊考虑的情况是,当连续零在开头或结尾时是要比在中间消去的字符少1的
复盘 倒地后的受身操作就是个憨憨。WA了第一发后,不仔细考虑逻辑上的漏洞,一直盯着代码细节看,导致耽误了不少时间。rdc 重写的那发简直是葫芦娃救爷爷操作。
D. Move
solved by rdc 280min -16 【憨憨】
题意 用容量为最小的 (k) 个包,装下所有物品。
做法 答案的下界为 (max(mxval,frac{sum}{k})),从下界从小到大 check 答案,上界不会超过下界加 (mxval),因为如果让每个包恰好能多装出一个物品,那么每个包装下的物品容量上限都大于等于 (frac{sum}{k})。
复杂度 (O(nmlogn))
做法2 容积对 (x,x+mxval,x+2mxval,......) 满足二分单调性。
复盘
- 第一反应二分。
- 看见大家都在解体了,开始怀疑二分的单调性是否成立。
- 开始乱搞。
- 从小到大增加容量。每次增加极小的使得物品归属发生改变的容量。
- 从二分算出的答案往下缩。
- 递归式二分。
- 这些做法一一解体。
- 确定出一个显然下界,猜测了一下正确答案不会比下界大太多,虽然没有想怎么证明,但写了写还是苟住了这道题。
E. Androgynos
solved by rdc 190min -1
题意 构造一个 n 个点的图,与其补图同构。
一道风格有点像 Atcoder 的构造。
做法
- (n) 为 (4k+2,4k+3) 一定解体。
- 冷静分析 (n=4) 的 case,然后就发现自己无敌了,因为对于 (n=4k),可以分成四个等大的 group。
- (n=4k+1) ? 新增的这个点,向两个 group 连边即可。
F.K-ary Heap
upsolved
题意 给定一个K叉堆,求其排名
做法
- 预处理F[i], 表示以i为根的子树的方案数
- ans = 总方案 - 比输入大的序列
- 枚举第一个比当前序列大的位置,然后找出所有闲置的子树,按照其父亲权值从大到小考虑,依次选择一些空闲的数填进去排列组合一下即可(当前枚举的位置也是一个闲置的子树,其排序权值为自身,而不是其父亲,这正是枚举比当前大的序列的原因)
H. Train Driver
upsolved
题意 随机三个点,找一个点使得三个点到该点距离和最近,求最近距离的期望。
做法
- 枚举前两个点 (u,v)。
- 建炒鸡源点,向 (x) 连边权为 (dis(x,u)+dis(x,v)) 的边。
- SSSP 即可。
- 当然不能 dijkstra,会解体,我们可以拿着普通队列假装当做优先队列使用。
- PS BFS 时传数组引用会比传一个高维数组,前x维快不少。
复盘
- 三个点都确定了,是个经典问题。以这三个点为源点跑 BFS 即可,三个点的 dis 和取极小即可。
- 前两点范围小,枚举前两个点 (u,v) 对点 (x) 计算 (dis(u,x)+dis(v,x)) 的值。
- 第三个点怎么办呢?比赛时在这停滞不前了。
- 没法枚举第三个点。
- 建源点,最短路,这个想法一闪而过,可惜没抓住。
I. Can They Go to Galar?
题意
口胡
- 期望线性可加性。
- 考虑一棵树怎么做,(p_v=p_ue_{uv})。
- 仙人掌的每个点双连通分量是个点,或者是个简单环。
- 拿出点双可以 Tarjan,也可以做 DFS 生成树,用每条回边生成一个环。
- 先计算 1 号点所在点双里,各点出现的概率,以此 BFS。
J. Upgrading Technology
solved by rdc 40min -1
题意 升级技能,升级有损耗,所有技能等级都大于等于 x 时有收益,收益损耗都可正可负。
做法 枚举技能等级的下界,枚举哪个技能取到下界,对剩下的技能预处理前缀和后缀和。