考前
Day -1
开了 \(3000\times 3000\) 个 map MLE 了
Day 0
T4 最后特判了一手然后 CE 了。
属于是 每天一个新错误
Day 1
看了一遍题,感觉前两题还行,T3 跟之前联考的一道题有类似的结论,T4 的超长题面让我第一眼以为它是大模拟,4s 1G 的时空限制让我感觉它非常不可做。
T1
感觉可以判每个数里是否有 \(7\) 之后直接筛,但是感觉判 \(7\) 需要 \(6\times 10^7\) 次除法和取模,以为跑不太动。想了 \(5\) 分钟没有更好的办法了,打算写一个试一下,然后发现跑的飞快,轻松过掉。测了一下极限数据发现输出太慢了,加了一个输出优化。花了可能 \(20\) 分钟。
T2
popcount 让我想到了之前 NOI 联训的一个 \(O(2^{\log_2 n})=O(n)\) 的东西,然后先考虑有序的 \(a\) 有多少种,然后转移的时候枚举 \(x\) 选了 \(k\) 个,乘上一个 \(\frac{1}{k!}\),最后乘上一个 \(n!\) 即可。记 \(f_{i,s,j,k}\) 表示考虑了 \(v_{0\sim i}\),所选的所有数的 \(\lfloor\frac{S}{2^i}\rfloor\) 为 \(s\),后 \(i\) 位剩下 \(j\) 个 \(1\),选了 \(k\) 个数的方案数。状态数 \(O(n^3m)\),转移 \(O(n)\),时间复杂度 \(O(n^4m)\)。看着可能比较满,而实际上非常跑不满,没怎么调就过了样例。
至此花了一个小时。
T3
在考试进行了大概 1 个多小时之后,机房里十分寂静,几乎没有打键盘的声音,再加上这个看着要数据点分治的数据范围,感觉 T3 可能比较困难,有了一定的心里准备。
想直接对着这个操作找找有什么性质,完全没有发现任何性质。想到了之前联考结论:一次操作相当差分数组交换,但是憨憨的我以为这个性质没有用,完全没有往这个方向想。
又想到可以模拟退火,感觉正确率也许还不错,但是好久没有写过模拟退火了,不敢确定能否写对。
于是就先打了一个 DFS 暴力,尝试找点规律,发现中间的数比较接近,不过也没有别的进展。然后去看了看 T4,感觉很阴间,不过部分分比较多。
写完了模拟退火之后发现几乎完全退不动,也就比 DFS 多拿了 12 分,经过调参也没什么用。
考后发现,差分数组先单减后单增的结论我在DFS打表的时候已经大概看出来了,而且就算没有看出来,直接对着差分数组退火,也比我直接对着原序列的操作退火来的分多得多。
在 T3 上花了 2 个小时而毫无进展。
T4
还剩下一个半小时写 T4 的各种暴力。
32分的暴力也不好写,写+调花了接近50分钟。调试的时候过不了第 \(3\) 个大样例,我为了方便调试就在跑完了第一组数据之后直接 return 0
了,最后调出来之后也过了第 \(3\) 个大样例,不过不知道为什么这句 return 0
最后没有删掉也没有注释掉,直接暴毙。(我在考试即将结束的时候还测了第一个样例,而第一个样例恰好只有一组数据……)
然后尝试 rush 了一个没有 \(3\) 类型的边的部分分,可以使用set简单维护,不过写完了没有时间调了,不过虽然没有过没有 \(3\) 类型的边的部分分,这个东西能过只有类型 \(1,2\) 的部分分,拿到了 \(8\ pts\),避免了我因为上面的 return 0
错误而 T4 爆零。
最后只剩下 5 分钟检查了,虚拟机打开得太慢了,没有时间了。
考后
T3 的模拟退火实在是太劣质了,民间数据的分数在 \(24\ pts\sim 32\ pts\) 之间浮动。
T3 直接在原序列上做行不通的话一定要及时转化思路,避免定势思维。在时间紧张的情况下还是应该以检查为重,避免为了 \(8\) 分而丢掉 \(24\) 分的情况。
还有 4 个月的时间就是省选了,难度有所提升,需要尽快适应,把一些平时用的较少的一些知识点多巩固练习一下,数论、字符串方面的一些知识还不够熟练,DP等一些思维题要多练多思考,可以去 CF/Atcoder 上找一找这种思维题。