「突刺贯穿的第二天集训」

0.杂谈

粉兔昨天晚上卷到一点多所以来不了,把题放到了群里,解压密码是 nealchenAK
小朋友继续看漫画玩游戏(((
兔竟在 8:43 来了!
开题发现题目名称就很毒瘤,于是不太敢做,先大致看了看。
发现 T2 的部分分给的十分多,于是先打了暴力。后来尝试利用一下随机这个条件,测了几个非常大的数据猜了个结论打上去了。
剩下两题一个都不会,先暴力糊上去,然后磕了会 T3 的部分分,无果。
出了成绩发现 T2 骗到了 70,血赚(

1.简易题解

大家好,今天我来继续垫底。
我已经完全李姐了我一点也不李姐的事实

A

给定一棵 \(n\) 个点的树,每个点可以花费 \(v_i\) 的代价将其子树内权值加 \(x\)(权值初始为 \(0\)\(x\in[1,10^9]\)),问使得叶节点权值互不相同且非零的最小花费。
先考虑如果 \(x\) 的大小没有限制怎么做,那么两个叶子不相同也就是它们到根节点路径上被操作的节点集合(非空)不相同。
如果有一个叶子的点集只有根,那么这样的叶子不超过一个,把它去掉后剩下的部分又构成一个独立的子问题,所以可以树形 dp,最终可以得到最小花费和方案。
接下来考虑构造满足要求的 \(x\)
随机显然是不靠谱的(兔:被生日悖论干爆),我们可以尝试给叶节点钦定 \(1\sim n\),然后构造。

B

定义一个以 \(2333333\) 为底,\(998244353\) 为模数的字符串 Hash,求给定字符串的字串中最大 Hash 值。
由于哈希值大概是随机的,所以最大值期望在 \(m-m/n^2\) 附近,然后从大往小依次检查即可。
怎么检查呢?维护前缀哈希值然后移项扔进哈希表查询就行了。

C

平面直角坐标系中给定 \(n\) 个点,从这些点出发 BFS,每个点可以到达相邻的八个点。第一次访问到一个点距离会加一,最远扩展到距离为 \(k\)。求所有点的距离之和。
题目名称是 multbfs 而不是 multibfs 之类的原因是兔认为都是七个字母比较好看(似乎坑到人了?)
面积的增长是一个分段函数(分界点就是两两之间距离一半),段内是二次增长的。(显然吧)
然后这个面积的增长函数是可以选三个点插值出来的,而点值可以扫描线或者大力差分,所以就可以算了。
根据 std 来看细节 非 常 多,所以不敢写了/kk
兔说差分 \(O(n^4)\) 碾了扫描线 \(O(n^3\log n)\),然而 tyy \(O(n^2)\) 碾了 std/se

2.DS 杂题选讲

今天的东西看起来挺友好的,然而我还是瞬间掉线。

1

题面见洛谷 P5579。
容易发现递增的性质不会变,按照生长速度排序后割的一定是一个后缀。
然后上线段树就完了。

2

给定一棵树,求 \(x\in[a,b],y\in[c,d]\) 时两点距离的最大值。
在区间内求直径,区间内得出的两个端点必然有一个直径端点,然后枚举情况连起来就完了。

3

题面见洛谷 P5278。
考虑一个区间成为公差为 \(k\) 的等差数列的条件:
1.\(\max-\min=(r-l)k\)
2.所有数之间差的 \(\gcd\)\(k\)
3.数字不重复。
证明很简单,留作读者练习。
考虑用线段树维护这些东西,发现难点在于 3。容易发现,维护每个数上次出现的位置可以处理这玩意。
我们记录每个数的前驱,在线段树里维护最大前驱,如果最大前驱也不在区间内那么满足条件 3。
具体实现有亿些麻烦,需要维护 \(\max\)\(\min\)\(\gcd\)、区间左右端点(更新 \(\gcd\) 用)等信息。

posted @ 2021-05-02 20:27  ajthreac  阅读(122)  评论(0编辑  收藏  举报