2024年pt市NOIP集训游记
Day 1
上午
迟到了半个小时,火大。发现机房被调错了,火大。幸好最后换回来了。
上午讲线段树+平衡树和一些小技巧,有点听不懂。
下午
中午吃得太香了 qwq。
拿到了账号,是 2024ptnoip2008。
中午机房热得跟地狱一样,火大。
14:30 开赛。
先看 T1。就是给一个 \(x\) 求区间长度大于等于 \(x\) 的所有区间的最大区间和。很容易想到这种题的方法应该是先预处理再 \(O(1)\) 查询。写了一个 \(O(n^3)\) 的暴力,加了一点常规优化变成了 \(O(n^2)\),然后过了样例,自造大样例跑得飞快就扔了(注意!这里我没有检查大样例输出有没有问题!)。自我感觉难度大概在 黄 到 绿(?),这一点存疑。当时的期望得分是 100pts。
看 T2。我草一个大模拟(应该算是大模拟吧 qwq)。很容易想到写一个大分讨,关键点在于得到离散化 \(X,Y\) 后的区间 \([l,r]\) 和这个区间的最大值然后就是一堆判断烦死了。区间最大值显然可以用 st 表进行维护,寻找离散化后的区间就是用两个二分,写了大概 1h,代码在可以缩行之后是 100+ 行。自我感觉难度大概在 绿,但是洛谷上面的原题是 蓝。当时的期望得分是 100pts。
看 T3。一个自我感觉很熟悉的数据结构题,但我不会写。想了一下特殊性质,感觉可以用一些小技巧过去,还是没想出来(听说 hzf 和 yby 想到了特殊性质 %%%)。最后打了一个暴力华容道然后就扔了。自我感觉难度是 紫,洛谷原题也是 紫。当时的期望得分是 30pts。
看 T4。发现要是没有 \(m\) 次操作的话是一个很板的结论题,但它加了一堆操作。这道题的离线和在线是没有意义的,因为每两个命令是不交叉的。开始想 \(O(n^2)\) 的数据规模,就是 \(n\le1000\)。发现只需要把上面那个结论再放到 \(m\) 次操作当中加一个双指针就可以写。写完大概 10min,暴力还是很好写的(hzf 和 yby 还有 llc 的 T4 用 \(O(n^2\log n)\) 的复杂度过了)。自我感觉难度是 紫,洛谷原题也是 紫。当时的期望得分是 40pts。
打完还有 50min 去睡觉了,昨天晚上四点才睡的。。。
估分:100+100+30+40=270。
实际:80+50+30+40=200。
为什么呢?
第一点,警钟撅烂!因为 T1 有考虑到负数,而我的快写并没有考虑到负数!痛失 20pts。
第二点,我发现我的 T2 和 llc 的代码高度相似,但是 llc AC 了,而我 WA 了 5 个点!应该有一些细节没处理好(因为这次我懒得写对拍了)。
看了一下排名,rk5。前四名的 dalao 们写了巨多分,可惜前四名我只认识一个林嵩 qwq。顺便提一下,rk6 也是 200pts。但是因为他涉嫌 ctj 所以被判作弊了(。
晚餐很好吃!
Day 2
上午
上午讲了一些常规串串和一些不常规串串。听不懂 QAQ。
下午
中午吃了好吃的。
中午在机房里面打了一些字符串板子,口胡几道绿题练练口手,然后没了。。。
下午的比赛从 14:00 开始,居然只有 180min,差评!
首先看 T1:写了一个非常形式化的题面。和前缀后缀有关,首先想到了 KMP 中的预处理数组,也就是最长前缀和后缀。发现这个数据对题目一点用都没有。注意到这个字符串是一个 01 串,很容易想到 01 Trie 和一些状压操作。但发现建立一个前后缀字典树后的转移人脑无法模拟,所以暂时抛弃。考虑了一个 Hash 表,对于每一个字符串都把它的所有前后缀存进 Hash 表中,带了一个键值,也就是出现字符串中此字符串的最小违和度。用 unordered_map 来实现。然后考虑了一个 DP,记 \(f_i\) 为前 \(i\) 个字符的最小违和度,转移方程显然是 \(f_i=\min{f_j+p_{j+1...i}}\),时间复杂度是 \(O(m^2)\)。显然不能通过本题,发现这个转移方程和二中月赛的 T4 神似,但我不会写,扔了,总时间复杂度 \(O(L+m^2)\),预计得分 50pts。
然后看 T2:很像一种基因测序,不会写,直接考虑 5pts 的特殊性质。当 \(n=m=1\) 时,显然输出一个 \(\frac{k}{2}\) 向下取整是可以的,扔了,预计得分 5pts。
然后看 T3:发现签到题居然是第三题?????模数处理+单调队列秒 AC(其实我最开始看成了求绝对值最小值,所以打了 20min 平衡树 qwq),预计得分 100pts。
然后看 T4:最开始其实 \(n=1\) 的挺可想的,因为题目中的看似复杂的两个操作退化成了一个,也就是把这唯一一个字符翻倍再翻倍。那我们首先考虑一下答案为无穷大时的判断方法。不难发现,对于原串,我们先跑一遍 Manacher,然后再讲原串复制一遍,再跑一边 Manacher。如果两次跑的答案有变化,那么就输出无穷大。这个正确性是显然的,对于一个串 \(s\),假设它跑第一遍 Manacher 的答案是 \(a\),第二遍 Manacher 的答案是 \(b\),如果 \(a=b\),那么说明两个字符串复制之后的回文是不相影响的,所以此时不是无穷大;如果 \(a\ne b\),那么一定是 \(s\) 的一个后缀加上 \(s\) 的一个前缀是一个回文串,显然地,一直复制以后就是无穷大了。如果不是无穷大的话,那么答案就是第一次跑 Manacher 的答案。预计得分 30pts。后面口胡了一个 60pts 的做法,就是将 \(n\) 个字符串全都两两凭借之后放入集合,然后对每一个集合中的字符串同样跑两遍 Manacher 判断是不是无穷大,然后如果不是无穷大的话就一直把 ans 更新成最大的 Manacher 数值。这是一个看起来很正确的算法,正确性却无法简单证明,而且后面没时间写,我也就没有深究了。
预计得分:50+5+100+30=185
实际得分:40+5+100+20=165
为什么呢?
敲响警钟!第一题和第四题都是因为数组开小 RE 了!!!!!
说一下难度,自我感觉难度是 蓝,紫,绿,紫。
看了一下一些新高一和新初三的,分数大概都在 \([60,165]\),大家都考得不太好。
晚上吃了两碗!
Day 3
上午
讲 2-SAT 和 Tarjan,听不懂。
下午
火大。
只会 T1,不讲了。
晚上
打 atcoder beginner contest。
看这里->awa
Day 4
上午
讲网络流。
下午
首先开 T1:mdfk 不会。到最后也不会写,随便提交了一个输出 \(0\),结果得了 6pts,乐。
然后开 T2:一眼网络流最小割,但我不会写(TAT)。发现可以 DFS 搜索上下炮台打的位置,然后最后处理左右炮台打的位置,可以完成特殊性质二和特殊性质三,期望得分 40pts。
然后开 T3:题面没看懂。
最后开 T4:想了一会,llc 说可以用二分图,我去现场学了一下二分图板子,然后发现对于一个 1,必然和旁边的 3 连边,3 也同理,最后再加上 2 的数量,综合运用了一下贪心算法,期望得分 85pts。
出分发现 T4 数组开小乐(!!!)。
老师说这是 NOI 的送分题,难度评级在 蓝~紫,我直接狂砍 133pts。

浙公网安备 33010602011771号