Difference between revisions of "2018 Multi-University, Nowcoder Day 3"
(4 intermediate revisions by 3 users not shown) | |||
Line 9: | Line 9: | ||
== Problem B == | == Problem B == | ||
− | + | Upsolved by kblack. (-2) | |
+ | |||
+ | 题意:一棵树,硬点若干个节点固定后,叶子和链(中的节点)删光,求硬点 $1$ ~ $n$ 个节点并操作后,期望剩余的节点数。 | ||
+ | |||
+ | 题解:对于度数 $\leq 2$ 的节点,除非被硬点否则肯定不会剩下。对于度数 $\geq 3$ 的节点,我们可以计算他被删掉时候的情况,即最多两棵子树(包括 uplink)有点被硬点才能被留下。我们可以发现这是一堆 $\binom{ x }{ k }$。可以记录分别有多少不同的 $x$,之后对于硬点 k 个的情况直接点积求和即可。 | ||
== Problem C == | == Problem C == | ||
Line 21: | Line 25: | ||
== Problem D == | == Problem D == | ||
− | + | Upsolved by ultmaster. (-6) | |
+ | |||
+ | 题意:转化过的题意就是,一个字符串在另一个字符串中找匹配的子串。匹配规则是字符相等,或至多差一。 | ||
+ | |||
+ | 题解:经典的使用 FFT 卷积匹配子串的题。使用 $(a-b)^2 ((a-b)-1)^2$ 就可以。唯一的问题是多出来一些前面的 $a^2$、$b^2$ 之类的项,是卷积不需要计算的,要踢掉。所以不能暴力地直接统计所有的前缀和,而是要有选择地。。。 | ||
+ | |||
+ | ultmaster: | ||
+ | |||
+ | * 出了 / 做了那么多道用 FFT 匹配的题,结果今天连 FFT 都没想到。 | ||
+ | * zerol 的暴力 Use DFA as NFA,被出题人卡掉了(太过暴力了)。 | ||
+ | * 1 秒跑 4 次 2.5E5 的 FFT 也有点神仙。 | ||
+ | * ultmaster 给出了一种假的卷积:$a(a-b)(a-b-1)(a-b+1)$,这样做可以避免对多出来的部分的额外处理(由最前面的 a 保证了)。但是被出题人卡掉了貌似。 | ||
+ | * 最后还是对照了题解过的。 | ||
== Problem E == | == Problem E == | ||
Line 42: | Line 58: | ||
Upsolved by zerol. | Upsolved by zerol. | ||
+ | |||
+ | 题意:求树上的染色数,使得相同颜色结点的最短距离恰好为 d。 | ||
+ | |||
+ | 题解:首先将问题转化为 f(d): 染色数使得相同颜色结点的距离至少为 d 的方案数。那么答案就是 f(d)-f(d+1)。关键是按照什么顺序统计使得距离 u 不超过 d 的点中不存在两个距离大于 d 的都染过了,如果能做到这个,只要按顺序求每个结点的剩下可用颜色乘起来就好了。这部分可以暴力,也可以动态点分治做到 $O(n\log^2 n)$。答案告诉我们要按照 bfs 顺序染色,也就是按照深度顺序染,至于为什么(证:当前访问到 u,x 和 y 已经访问过,设 dep(lca(u,x)) <= dep(lca(u, y)),那么 x 到 y 只需要 将 x 到 u 的路径上 d(lca(u, y), u) 那段替换为 d(lca(u, y), y) 就行了,这样距离一定不超过 d。) | ||
== Problem H == | == Problem H == |
Latest revision as of 14:11, 26 July 2018
Problem A
Solved by kblack. 01:16 (+1)
题意:容量是四元组,求限制内最大价值和。
题解:将物品分为两半,每半用 $2^{18}$ 枚举,然后耗费 $36^4$ 更新一遍,处理没有用完限制的部分。
Problem B
Upsolved by kblack. (-2)
题意:一棵树,硬点若干个节点固定后,叶子和链(中的节点)删光,求硬点 $1$ ~ $n$ 个节点并操作后,期望剩余的节点数。
题解:对于度数 $\leq 2$ 的节点,除非被硬点否则肯定不会剩下。对于度数 $\geq 3$ 的节点,我们可以计算他被删掉时候的情况,即最多两棵子树(包括 uplink)有点被硬点才能被留下。我们可以发现这是一堆 $\binom{ x }{ k }$。可以记录分别有多少不同的 $x$,之后对于硬点 k 个的情况直接点积求和即可。
Problem C
Solved by zerol. 00:45 (+)
题意:每次把数列中一个区间的数剪切到数列的开头,最后打印这个数列。
题解:模板题。treap / splay / rope(pb_ds)
Problem D
Upsolved by ultmaster. (-6)
题意:转化过的题意就是,一个字符串在另一个字符串中找匹配的子串。匹配规则是字符相等,或至多差一。
题解:经典的使用 FFT 卷积匹配子串的题。使用 $(a-b)^2 ((a-b)-1)^2$ 就可以。唯一的问题是多出来一些前面的 $a^2$、$b^2$ 之类的项,是卷积不需要计算的,要踢掉。所以不能暴力地直接统计所有的前缀和,而是要有选择地。。。
ultmaster:
- 出了 / 做了那么多道用 FFT 匹配的题,结果今天连 FFT 都没想到。
- zerol 的暴力 Use DFA as NFA,被出题人卡掉了(太过暴力了)。
- 1 秒跑 4 次 2.5E5 的 FFT 也有点神仙。
- ultmaster 给出了一种假的卷积:$a(a-b)(a-b-1)(a-b+1)$,这样做可以避免对多出来的部分的额外处理(由最前面的 a 保证了)。但是被出题人卡掉了貌似。
- 最后还是对照了题解过的。
Problem E
Solved by ultmaster. 00:49 (+)
题意:把字符串循环起来,然后对本质不同的循环字符串进行分组。
题解:只要找到最小循环节就可以了(hash,KMP)。一开始题都没看清楚就上了 SA,一通操作以后跟 kblack 重新确认了题意。发现就是个签到题。
Problem F
Upsolved by zerol.
题意:询问一列数(每个数都是一个一位十六进制数)的某一段的所有非空子序列形成的数字的重复SOD小于16的结果的分布,同时支持修改一个位置上的数。
题解:SOD(sum of digits) 这种运算不改变 模 base-1 的值。线段树维护区间的答案和区间中 0 的个数,合并代价 16^2。( SOD(0) = 0, SOD(v) = (v - 1) % (base - 1) + 1)
Problem G
Upsolved by zerol.
题意:求树上的染色数,使得相同颜色结点的最短距离恰好为 d。
题解:首先将问题转化为 f(d): 染色数使得相同颜色结点的距离至少为 d 的方案数。那么答案就是 f(d)-f(d+1)。关键是按照什么顺序统计使得距离 u 不超过 d 的点中不存在两个距离大于 d 的都染过了,如果能做到这个,只要按顺序求每个结点的剩下可用颜色乘起来就好了。这部分可以暴力,也可以动态点分治做到 $O(n\log^2 n)$。答案告诉我们要按照 bfs 顺序染色,也就是按照深度顺序染,至于为什么(证:当前访问到 u,x 和 y 已经访问过,设 dep(lca(u,x)) <= dep(lca(u, y)),那么 x 到 y 只需要 将 x 到 u 的路径上 d(lca(u, y), u) 那段替换为 d(lca(u, y), y) 就行了,这样距离一定不超过 d。)
Problem H
Solved by kblack. 00:19 (+)
温暖的枚举签到。
Problem I
Solved by ultmaster. 04:24 (+)
题意:给一个三角形,求三角形内任意找 $m$ 个点组成的凸包的点数的期望。
题解:注意到凸包的形状与三角形形状无关,所以答案只跟 $m$ 有关。又因为 $m$ 不超过 10,于是就成了愉快地提交答案题。在本地跑了蒙特卡洛之后,发现收敛效果并不理想。最后上了服务器,甚至上了多进程。但是最后这些操作并没有什么卵用,报着试一试的心态把一开始(上多进程之前)跑出来的答案交了一发居然过了。
没想到居然还是正解。
Problem J
Solved by ultmaster. 02:51 (+)
题意:给一个简单多边形,给一个圆心,求最小的半径使得圆覆盖多边形的一定比例。
题解:二分答案求多边形与圆的交。kblack 发现这题以前写过(当然不大一样),很早就上了,写来写去调来调去还是不大行。最后上了 Plan C,去网上随便拉了个板子一发过了。当然这一通操作(我的锅?)最终导致 kblack 彻底掉线,本场 GG。