POI 2023/2024 R1 VP
100+100+100+41+100=441,而波兰有整整 69 位老哥分比我高。真是受不了了,在波兰都进不了集。
- T1
二分答案 \(k\),枚举选了一个横着的长条(竖着可以转一下再做一遍,同理),现在要找从剩下的格子里面能否选出一个长度为 \(k\) 的长条。
一种情况是横着选,如果和第一个横着的选在了不同的行,整个行都能取到,否则只能去左边右边,前缀和算一算即可。
另一种情况是竖着选,如果在这个横着的左边或右边的列上,整个列都能取到,否则会被分割成一个前缀和一个后缀,预处理一下即可。时间复杂度 \(\mathcal O(n^2\log n)\)。
- T2
这个问题太不可做了,于是猜一手有循环节,然后就过了。
卡哈希,素质一。
证明不用分类讨论太多,你考虑把对应后缀建成一张图,一定是一个基环树,因为对于每个后缀而言,我只会不断增加他的众数,因此众数不会改变。那么基环树上跳就会得到一个 ρ 状路径,和循环节的形态相同。
时间复杂度 \(\mathcal O(n\log n)\)。
- T3
出的真好。
把按钮作为边,将对应行列作为点连起来,现在问题转化为选出一个非空边集使得每个点度数奇偶性相同。
偶数是好搞的:拉一个环出来就是对的了。
奇数不太好搞。我们发现一个必要条件是连通块大小是偶数,因为奇数大小的度数和是奇数,矛盾;而对于任意偶数大小连通块,我们都一定可以构造,具体来说,考虑拉出一棵生成树,从底向顶构造就是正确的。
那么就做完了,时间复杂度 \(\mathcal O(n)\)。
- T4
我只会 41 分,而波兰语题解看不懂,难受了。
41 分做法非常简单,考虑对于每个左部点,将他和连边的右部点全部设成字母 A,剩余左部点设成字母 B,剩余右部点设成字母 C,这样连边的限制就全部满足了。
接下来还要保证两边内部联通且两两不同,可以考虑二进制分组,每次把左部点全部设为 A,右部点中对应位是 1 的设为 B,是 0 的设为 C,不超过 \(n+2\log n\) 次操作。
- T5
首先,只选一组线段是典中典问题,按照右端点贪心即可。设答案为 \(ans\)。
我们发现,原问题一定存在 \(=ans-1\) 的一组解:具体而言,把弱化问题的前 \(ans-1\) 条线段都和第 \(ans\) 条匹配即可。而原问题的答案不可能超过 \(ans\),因此只需要判定能否取到 \(ans\) 即可。这就简单了,还是按照右端点贪心,每次两个两个加入即可。时间复杂度 \(\mathcal O(n\log n)\)。
浙公网安备 33010602011771号