「こんなきれいな星も、やっぱりここまで来てから、見れたのだと思うから。だから・・もっと遠くへ・・」

THUSC Day 3 训练日记

THUSC结束了。终于回到了南京。祝贺HYM神犇直签THU~
本菜因为面试实在太悲剧只搞到了NOI前60高考分数线降60的协议。
今天在火车上花了2.5h捉了NOI2011 Day1. 我对历届NOI题目几乎没有印象,不过这个反而成有利条件了,这样能以全真模拟的方式来捉往年试题真心好玩,或许训练效果也能好一些。
第一题兔农不会正解,直接乱搞暴力75分


第二题智能车。明显是找关键点然后最短路。我YY了一下,想象一下就会发现,最优解可以用一根软绳子连接起点终点,矩形就是障碍物,然后用力拉绳子,就能 得到最短路。YY一下这个物理过程就可以发现绳子拐弯处必然是矩形顶点。于是如果暴力建图,O(N)判边是否可行,是O(N^3)的。但YY一下可以发 现,绳子必然不会出现“拐回去”的情况,也就是关键点x轴是严格递增的。于是我们只要考虑对每个顶点快速连出可行边。我们发现,实际可行边始终是一个角度 区间,而且这个角度区间随着x轴增加逐渐变小。于是我们枚举顶点后从小到大枚举x轴关键点(就是矩形的顶点),然后维护可行角度区间,这样就能O(1)判 出一条边是否可行。于是就O(N^2)了。N=8000,看上去压力很大,但因为一旦角度区间不存在了就可以直接跳出循环了,实际速度还是可以接受的。代 码有点小麻烦。我因为边界问题挂了几次。


第三题阿狸的打字机。我觉得这题是很有趣的题目。首先观察到,打字的操作实际就是建立了一棵trie树。然后我们要回答某个单词在另一个单词中出现了多少 次。首先肯定要把fail指针树建立出来。然后暴力做法就是,对每个单词,枚举前缀,然后通过fail指针判定这个前缀的后缀是否是想要找的单词。一个改 进的想法是,我们可以对于某个母串离线回答所有有关这个母串出现了多少次字串的询问。这实际就是,把母串的所有前缀在fail树上标记出来,然后查询就是 查询某个子树有多少被标记的结点。这显然可以树状数组维护。然后我们可以很自然的想到,在DFS trie树的过程中维护fail树上被标记的结点的树状数组。于是问题得到了解决。这题解题思路还是很有趣的。