H

LYF 签到

F

题意:

给定一个括号序表示入栈序列,给定n1e6个数,要求给这些数安排一个顺序,使得任何两个栈非空的时刻不会栈内情况相同(即所有元素个数以及出现位置都相同)。

ZRC解:

括号序可以搞出一棵树,题目要求即为兄弟颜色不同。用priority_queue贪心即可。

补A

题意:

太绕了,银川区域赛原题,原本是trie树题,但是内存限制只有32M。

解1(压缩trie):

(ZRC在赛场上其实口胡了这个做法但是不太写得动

就是把trie上的链缩成点。

具体实现的话可以边插边改变形态也可以先排序(sort也能过,桶排序更快)后直接处理出来(LYF研究的做法)

解2(哈希):

待补

补C

题意:

30000个男人,30000个女人,其中每个女人都有讨厌的最多100个男人,问是否能匹配。

考场上口胡的乱搞解(待试验正确性):

考虑大部分男人都是能匹配到女人的,只需要将被讨厌很多次的男人拎出来搞匹配即可,具体数值靠调参。

正解:

待补

补J

题意:

给定一个凸包和一堆点(2e5),每个点可以发光,问照亮凸包每一条边需要几个点。

解:

(考场上口胡完的第一步)求点到凸包切线

问题就转化成了 “最小环覆盖”,环上有n个点m条线段,问至少多少条线段才能覆盖这个环。比赛时卡在这里一段时间不会做,又被拎到别的题目里去了。

考虑首先有一个贪心做法。对于每个起点,可以将被包含的线段全部删去,因为它们在贪心里是没用的。在这之后,线段右端点位置就关于左端点单调了。枚举起始线段,每一步都可以得到接下来最优的是哪条线段,复杂度O(nm)。

上面这个做法在赛场上也想完了,但是想如何优化它时只想到求过的可以记录答案,但没想到可以倍增。考虑显然可以方便求出f[x][y]表示从x线段起走2^y条线段最远到哪里,环上的细节处理一下就做完了。

代码待补