赶在2019年最后一天补了这篇游记。
Day -1
跟dcx坐飞机到了北京,不知道第几次到首都国际机场了,不过听说南航要搬到大兴机场,所以可能是最后一次到这了?
当地一个家长来接机,带我们去日料店,不过我们热情不太高,选择了一些主食(我是拉面)。
酒店还是熟悉的中关新园9号楼。怎么说呢?那个楼层有一股旧时招待所的气息,不过房间倒是还好,住起来舒服。
稍微安顿下来,看看b站就睡了。
Day 0
晚上睡得一般般,不过确是这次睡得最好的一天了。
早上意外发现北京昨晚下了雪,起床之后还有小雪,对南方人来说是见不到的美景。略带兴奋地跟dcx在外面闲逛,顺便去报到了。街上随处可见积雪,鞋子踩在雪地上陷了进去,意外得带感。
中午换到了1号楼,看起来楼层和房间漂亮了很多,唯一不太满意的是暖气没法调温度(不会关暖气)。
下午的试机用的是去年的两个签到题以及一个去年试机的交互,写了写跑路了。
晚上本来想写点题,最后咕掉了,继续颓b站。
Day 1
晚上睡得不太好,暖气很闷热,大概睡了5小时。
早上起来涂了点风油精,吃了很少的早餐上场了。
因为是第一场,稍微有点兴奋,过了一会才冷静下来看题。
稍微审了一下题。T1是个树上计数,看到 n ≤ 80 n\leq 80 n≤80感觉并不会太难,T2是个奇怪的字符串,T3看起来有点怪。
感觉T1比较签到,想了一下容斥就会了,没认真算复杂度,不过是个多项式算法应该都能过?
感觉对字符串比较有信心,于是没有急着写T1,去认真想了一下T2。感觉有点像SAM+LCT,再感觉一下过于不能写,顿时思路卡住了。认真思考一下,这题要求最大值最小,显然的做法是先二分一个答案,然后每次贪心扩展最长的距离,这一步是瓶颈。不知怎么想到一个模拟赛见过的trick,就是先倍增再二分,于是只需要 O ( l e n ) \mathcal O(len) O(len)用SAM计算一个区间的权值即可做到 O ( n log 2 n ) \mathcal O(n\log^2 n) O(nlog2n),看起来很正确。
花了点时间码了T1的容斥背包DP,9点左右交上去过了,旁边的老哥不知道发生了什么,一直在莫名TLE。然后开始写T2,考虑了一下,发现如果写出了 O ( l e n ) O(len) O(len)算区间权值的代码,改一下就是正解了,于是先码了个暴力,写的时候稍微有点慌,不过还是很快调出来了。然后改了个二分,自信一交,喜提60, n = 5 ∗ 1 0 4 n=5*10^4 n=