[DMY]2024 CSP-S 模拟赛 Day 14
没挂分,没写不完,没超常发挥,平常的有点不平常的一场。
AKIG 赛时 33min26s 才过 T1,足见比赛难度。
赛前
听说运动会开幕式很好看,于是我就荣升为本校现读所有学生中为数不多的几个没看过运动会开幕式的人类。
比赛开始前 20min 发现没有比赛,问了以后发现我们被 ban 了。
所以协商好之前一直在用学长给的 zip(感谢)
赛时
浏览四题,发现题目长度适中。
T1 10min 码完暴力,发现样例没过,想了一会意识到不保证是排列,改改以后有分了。
如果把构造过程假设为向一个空序列中添加元素的过程,和昨天的考试联系起来,不难想到一个类似的区间 DP。
设 \(dp_{i,l,r,rl,rr}\) 表示已经选了 \(x\) 个数字,目前序列的左右端点分别是 \(l,r\),次左次右端点分别是 \(rl,rr\) 的答案。把原数组排序,转移的时候分别对两端点考虑,如果满足条件就加上该状态的答案即可。
这点可以用记忆化搜索实现,我使用了一个 map<int,map<int> > f[80][80][80]
的数组来实现,赛后发现其实可以用哈希来表示状态,比这样要省很多空间。
写完以后发现只有 50pts,看了 15min 还是不知道哪里错了,发现也没有多少人过,就先弃了。
写完 T4 剩下大概 20min 的时候发现过了一车,所以回来看看,发现需要从次小元素开始跑,对于所有的最小元素,只需要记录一下并在最后乘上对应的贡献,具体为 \(num!\),就能确保答案正确。
然后过了所有样例。
T2 看完题感觉有很多性质可推,但是推了将近 15min 也没有发现什么有用的性质,观察数据范围发现没有给指数级枚举的分数,第一档是 \(m\le 10^5\)。
想了一会发现这个数据范围允许我们预处理出所有的 \(b_i\),然后稍微想一下不难得到两个 dp。
直接做一分没有,需要加点广义前缀和优化,然后有了 20pts。
看榜,发现目前最高分也就是 20pts,然后就先跳了。
T3 觉得题面太长,所以赛时根本没有去看题。
T4 暴力可以做到 \(\mathcal{O}(2^{n\cdot m})\),第一次写挂了,检查以后发现数组转一维的时候多加了个 \(m\)。
其实这里可以写二进制状压枚举,但是结合到昨天的 T3,我想让代码有些优化的空间。
写完以后容易想到如果当前的状态已经非法可以剪枝,同时能根据当前状态来决定转移方式。
剩 20min 的时候写完,但是没过样例,推了推不知道哪里出了问题,就先去调 T1 了。
赛后
中午回去睡觉了,下午发现比某只高了 8pts。
原题机搜原题搜到了公元纪元都没搜到:
索性不搜了,待会去听讲解把。
感觉我电脑被限流了,luogu 进了 5 次都没进去。