NOI2022游记

就简单记录一下两天比赛的过程。

Day1

比赛前想的是要尽快切完前两题,第三题多打一点部分分,争取拿到250+。

打开题面,发现有一个交互题,简单扫了一眼,就大概知道这题非常毒瘤,应该是不可做的。但t2看起来像是一个小清新的dp套dp,t1一开始没什么思路。

t1不会摩尔投票,思考了很久,一开始想的维护每一段的众数,但是算出现个数的时候是\(O(段数)\)的,感觉没什么前途。最后决定用随机化,但还是有一个问题:如何做到随机访问序列的任何一项 。启发式合并vector的时候无法做到大的加到小的后面,但是随机访问的时候是不在意顺序的,所以vector的顺序可以任意。剩下的问题就是:1. 如何在乱序的vector中找到最后一个位置 2. 如何删除指定位置。找最后一个元素的位置可以另外开一个链表维护顺序,而删除可以使用懒惰删除(当删除的元素>\(\frac{1}{2}\)的时候重构),这样删除的元素也不会太多,不会多次询问到删除元素而影响复杂度。构思好做法好像就已经用了1h了,代码也不是很好写(6k左右),又花了1h才过了所有样例。

我看了眼大样例,觉得挺强的,而且gen和暴力都不太好写,同时花的时间也比我预期的要长很多,最终决定还是不对拍了,先去冲t2正解。

t2先是看错题了,把r-l>=2看成了区间长度>=2,不过很快就反应过来了。有人看错后还想到了解法,写完后测了样例才发现不对,这种情况挺惨的。

一开始以为这题有什么很强的充要条件,想了1h,但还是没什么思路,这时候比赛还剩下2h,而我只有100分,顿时感觉有点慌。

最后还是决定先写个搜索+复杂度好一点的判定,看看能不能简化状态。写完后卡了半天常数,花了1.5h。看了眼部分分,有40分,心里稍微冷静了一点。剩下半小时想冲个t3最简单的暴力,但是发现没有会做的部分分,就检查了下文件提交了。

出来后问了一圈,发现大家都是140~150左右,要用day2来区分了。

下午查分,发现t1挂了,只有65+40+0=105了。

测了一下,assert failed了,最后才发现是我链表的删除写错了。

day1是铁定到不了队线了,听说队线是130左右。

Day2

开场看了前两题,但都没有一眼看出做法。

第一题分析发现,两棵树有相同子树就一定先合并,剩下的就只有最多\(k\)个了。

如果直接全排列枚举,复杂度看起来就很对,因为向下递归的时候\(k\)至少会-1。

树哈希用了oi-wiki上的最后一种。

大概一个多小时的时候过了所有样例,并开始看t2。

t2分析了一下\(l=r\)的情况,发现贪心选择就已经有答案的单调性了。下面的问题就是对于限制\(l,r,x\),等于\(x\)的位置究竟放在哪里?然后分析了一些特殊情况,发现等于\(x\)的位置尽量往前放是不会变劣的,而且感性理解从各种方面来讲,往前放都会很优。大约思考了40分钟就开始写了,写的时候还是比较慌的,毕竟没有严谨的证明,如果做法假掉就完蛋了。代码大约写了4k,不过没怎么调试就过了所有样例。

第三题写了一个搜索,不知道能拿多少分。这时比赛还剩下1.5h,我觉得前两题做法都不是那么显而易见,不挂分应该就能到队线了,我决定不做t3了,先去检查t1,t2。

首先把t1,t2的拍子写上了,然后开始静态查错。中途把发的零食也吃了,感觉时间过的很漫长。

检查了1.5h但是一个错误都没发现,反复确认文件后就提交了。

出来先是遇到了csy,他说有270+,我感到很震撼。但是问了很多人,发现到200的也不多,但是暴力堆满有180 。

下午查分,没有挂,100+100+21。

总分100+65+40+0+100+100+21=426。

唯一的遗憾就是d1t1挂了。

posted @ 2022-09-03 11:39  WWW~~~  阅读(181)  评论(1编辑  收藏  举报