NOI 2026 总结

Day 1

做T1,感受了一下发现会了一个做法,但是状态是 \(O(m^2 k)\) 的做法,感觉应该能 \(O(1)\) 转移。
但是被 \(t = 20\) 组多测诈骗了,于是没写继续思考更优的做法。
想了 \(~30 min\) 之后,发现自己特殊性质都不会更优的做法,于是决定写上述做法。
先写了一个暴力验证一下正确性,大概是 \(O(n m^2 k)\)的,提交发现获得了 76p , 大为震撼。
前缀和优化一下发现轻松通过了,卡了一下常数就扔掉了,大概是 \(O(n m k)\)的,此时 \(1.5h\)
做T2没啥想法,遂思考链的特殊性质,做了一会发现应该是前缀 / 后缀随机,其他暴力指向 \(y\) ,发现细节挺多。
写了一万年得到了一个 \(O(n ^ 3)\) 做法,交上去发现正确性没问题,发现都可以三分遂做到 \(O(n \log^2 n)\),此时 10:30。
尝试推广到一般情况感受了一下,发现形式非常优美, 11:00 获得了 60p。
此时我意识到只需要把暴力改成三分,然后只需要支持邻域查询的数据结构即可通过此题,我选择了点分树。
由于我赛前没有写板子,导致我几乎是现场发明了一遍点分树,在 12:30 完成了代码并通过了大样例。
遗憾的是我发现他的耗时特别久,我写的点分树在重编号上需要一个哈希表,我尝试了 map 和 umap 都无法通过。
提交到 selfeval上获得了 60p , 和暴力一致。我完全不知道如何去掉哈希表(赛后发现是不困难的),在思考一会后选择了放弃。
最后 15min 我匆忙地去写了 T3 的暴力 , 会了一个问 \(1 \sim W\) 的做法,可以通过第一个子任务,由于我觉得他问的次数实在是太多了,于是没有让他跑最后两个子任务,但是赛后发现他可以在最后两个子任务获得 6p。
最后 Day 1获得了 100 + 60 + 10 分,赛后讲评发现许多选手 T2 和我的做法一致并获得了满分,T3不少人通过一些乱搞获得了非平凡分数。

NOI之前没有携带电脑导致我NOI 赛前一周都没写代码,没有熟悉板子,导致NOI D1T2的点分树实现细节上出现了问题
所以NOI之前要带电脑。

D1T2 在完成 60p 的代码之后应该先看 T3 , 合理分配时间
赛后看就算 T2 获得了满分,也有可能不如在 T3 获得非平凡分数。每道题都应该留有充足的思考时间,然后再做决策

Day 2

做T1,思考先二分之后如何判定,一开始我认为这是十分平凡的,但是开始写代码的时候发现完全不对。
于是我先思考了一下特殊性质,发现 \(k\) 是偶数的特殊性质看上去比较好做。尝试了很多做法,最后找到了一种比较有前途的做法并通过了对应测试点,此时 9 : 00。
发现奇数只需要多讨论了一下,冷静思考后发现平方是简单的,于是快速实现了一下 \(O(n ^ 2 \log n)\) 的做法,并在 selfeval 获得了 55p,此时 9 : 30。
然后我尝试用数据结构优化这个做法,两种情况中,第一种情况是好做的,可以简单做到线性,第二种情况思考很久之后也只会 \(O(n \log n)\)的做法。
加上外层的二分就是2 log , 由于 \(n = 1e6\) , 我并不认为能通过,但最后还是实现了这个做法,发现他轻松跑过去了,获得了 100p , 此时 10:20。
做T2 , 发现我忘记了 prufer 序列如何还原树,但是经过手玩之后还是会了 \(O(n ^ 2)\) 做法,获得了 20p , 此时 11:00。
观察了一下我做法的形式,发现可以做 \(a_i \le 1000\)\(x \le 1000\)
可以对值域暴力然后是一个二维偏序状物,我选择了 \(O(\sqrt n) \sim O(1)\) 的根号数据结构优化他,理论可以获得 52p。
由于细节不少写到了 12:00 , 发现调试不出来,到 12:30 时放弃了调试,决定先写完 T3 的暴力。
因为之前我看了一下 T3 , 误以为自己会一个 \(O(n ^ 4)\)的 做法,看上去能获得不少分,真正实现才发现全错了,不得不写指数级暴力。
在 12:50 在 selfeval 获得了 4分( \(n \le 4\) ),回去调试 T2 无果,最后1min 我对我T3代码测试了一个 \(n = 6\) 的样例,发现他很快跑出来但是结果不对,遂感觉可能 T3 要挂掉了。
出场报的 100 + 20 + 0 , 查分发现 T3 确实挂掉了,120 分。
查完分思考了一下,发现 T2 对值域暴力是完全没必要的,可以多一个限制变成三维偏序,然后使用一个数据结构就能做了。

不要着急,每一步都想清楚,得到一个做法之后再多做一会不要直接丢掉,应该思考一下能否推广到正解

写 T2 52p 代码时,脑子其实并没有完全想清楚,应该在自己有充分把握的情况下再写代码。
在编写长度不短的代码的情况下,先评估能否写出来。

T3 在有一些想法的情况下,应该先想清楚细节,而不是先放下,从而导致对可能获得的分数产生误判。

在脑子清楚的情况下再去编码,否则可能会漏考虑很多问题。

Day ???

100 + (100 + 60 + 10) + (100 + 20 + 0) = 390。

posted @ 2026-07-27 13:40  lagrange_i_f  阅读(45)  评论(0)    收藏  举报