NOIP2023 游记
Day 0
润南航,看了几个板子,摆烂。
准考证上写的是“入门组”,难蚌。
water235 好闪,拜谢 water235。
NOIP2023 ++RP!
Day 1
17 岁生日。
早上 7:40 左右到南航排队。听到有人在说 SkyWave 进 NOI2024 江苏 E 队。拜谢天波。
8 点开始试机。改好 codeblocks 的设置之后,写了一个测试程序,输出 NOIP2023 RP++、sto water235 orz。
8:27 左右收到了题面 pdf,但是没有收到大样例,不会不给大样例吧。
8:34 才收到 pdf 的密码,比赛延时了 5 分钟。
先看一下四道题,今年居然没有寄数题?那太好了。
T1 一眼 sb 题,显然把当前串从小到大,其他串从大到小排序,直接无脑 \(O(nm\log n)\) 就完事了。8:57 测完大样例。
T2 也很简单,直接让 \(a_i=i\),\(T=n+1\),\(F=-n-1\),\(U=0\),最后并查集合并 \(i\) 和 \(a_i\)、\(-i\) 和 \(-a_i\),\(U\) 的个数就是 \(i\) 和 \(-i\) 在同一个集合的个数。9:19 测完大样例。
T3 的数据范围看上去应该是 \(O(q(n+m))\),也就是暴力修改,\(O(n+m)\) 判断。
首先发现只有 \((a_1-b_1)(a_n-b_m)>0\) 时答案可能为 1。假设 \(a_1>b_1\),也就是 \(a_i\) 对应的一段 \(b_j\) 必须满足 \(\max_{j} b_j < a_i\)。显然有 \(O(qnm)\) 暴力 DP 做法。
对于所有的 \(i\),符合条件的 \(j\) 形成的集合是包含关系。很快就想出了 \(O(q(n+m)\log m)\) 的做法,从小到大枚举 \(i\),记录对于当前的 \(i\),最多能匹配到的位置 \(r\),如果 \(a_i>a_i-1\) 就向右找第一个不合法的,否则向左找最后一个合法的。但这显然无法通过。
然后发现对于 \(a_i\) 的下降段,\(r\) 只需跳到最后一个小于下降段最小值的位置即可,之前更大的 \(a_i\) 一定可以到达这个位置。
又想了一会儿,发现只有 \(a_i\) 中的前缀最大值是有用的,只有这些 \(i\) 能让 \(r\) 向右移动。对于其他 \(i\),只要判断在 \([1,r]\) 中是否存在合法位置即可,不需要移动 \(r\)。最后判断 \(r\) 是否等于 \(m\)。发现当 \(a_n\) 是 \(a\) 中最大值时这样做就行了,能过特殊性质。
但 \(a_i\) 中的最大值之后的部分还没有处理。想了一会儿,发现这个问题是对称的,如果 \(X,Y\) 合法,正反各做一遍上面的判断一定都合法。然后猜测正反判断都合法 \(X,Y\) 就合法,感性理解一下,感觉是对的,又考虑了几种情况,都没有出问题。于是开始写这个做法。10:30 开始写,10:53 测完大样例。然后看了一下大样例的输出,还好不是全 0 或者全 1。
然后看 T4。显然,没有被区间覆盖的位置不可能选。于是想出了对时间离散化后暴力 DP 的 \(O(m^2)\) 做法。然后发现这个 DP 可以用线段树优化,就能做到 \(O(m\log m)\)。11:56 测完大样例,发现最后一个大样例跑了 1.1s。
开始检查程序。前两题本身就是暴力没法拍,造了一些 corner case 测了一下。第三题随机数据感觉强度不够。最后检查了一下数组大小、多测清空、long long、文件之类的东西。
出场估分:400。
感觉 T1、T2、T4 都不太可能挂掉,就看 T3 了。
下午摆烂,等民间数据。
晚上云斗出分,400 分。另外一个民间数据也没挂分,开香槟。
Day 2
小图灵数据也出来了,没挂分。
I AK NOIP-Junior 2023。

浙公网安备 33010602011771号