滑蒻稽的博客

CSP2021 游记

Day 1

早上做小巴车去绵阳东辰,「人形魔芋」给我看了些【数据删除】的东西,并问我要不要,然后发现我手机上的【数据删除】不可用,只好作罢。

中午吃饭感觉没吃饱其实是因为我大部分时间在上厕所,然后去车上休息了一会就进考场力。

坐我旁边的好像都是初中生,左边第二个是「WzhDnwzWzh」。开考前是不准动键盘的,就开了下虚拟机,然后看了下电脑配置发现是 i7-10700K,惊了。绵阳东辰还是挺良心的,监考老师说有一个高版本 Dev-C++ 在硬盘里,可以卸载旧版本然后装新版本。

点开安装包就去看题面了,跳着看了看发现有一道构造,突然想起某「CS」昨天在洛谷上的发言,感觉他很不可信。

A 廊桥分配

然后就感觉第一题没读懂???只好重头开始仔细看第一题。看完后感觉挺可做的,又不是很可做。另外「因此不存在两架飞机同时抵达的情况」,那存在两架飞机同时起飞吗?你倒是说清楚啊。。。不过因为「机场只有一条跑道」,我就假定时间点都是不同的,继续看题了(后来发现这一点居然写在最后的数据范围里。。。)。这一点我甚至问了监考老师,不过他说不回答任何问题,下次还是看仔细点。。。

然后就是排序一下,离散化一下,研究了样例一下,发现只要给廊桥带上一个编号,算出每个飞机能去的编号最小的廊桥(反正只要能去,去哪个无所谓(contributed by 「fanypcd」)),并给该廊桥 ++cnt,最后做一遍前缀和,就知道有 k 个廊桥情况下能停多少飞机了。反正这个思路就挺大众的。

那当前飞机能去的廊桥,显然是廊桥上之前停的飞机已经走了的廊桥。所以用一个优先队列 \(l_1\) 存这些「空的廊桥」,再用一个有限队列 \(l_2\) 存「有飞机的廊桥」。\(l_2\) 按飞机离开的时间从小到大排序,\(l_1\) 按廊桥编号从小到大排序。对于每一个飞机,把 \(l_2\) 里飞机离开时间小于当前飞机起飞时间的廊桥弹到 \(l_1\) 里。然后从 \(l_1\) 里取最小的廊桥就是当前飞机能去的最小的廊桥。

此时离开考已有 80 min。

B 括号序列

看了第一句差点喷血出来,被「小 c」切掉的题我都没有思路。

继续看题,研究了一下数据范围和括号序列的性质,应该是区间 DP。感觉没啥大问题就开码了,开始了整场比赛的崩坏。。。

用了一会时间研究如何把 \(O(n^4)\) 优化到 \(O(n^3)\),其实就是对于 ASB 这种转移做一个后缀和,把 * 个数不同的情况加起来。然后 A 的右端点每移动一下,就处理一下后缀和。

写到一个多小时基本上写完了,这个时候已经很慌,因为时间花的太久了。本来第一题就乱撞了一会才撞出来,这个题又感觉很悬。然后测了第二个样例,发现是错哒。意识到对于 AB 这种转移,虽然 AB 可能不同,但 AB 可能相同,这就导致了重复的计算。

想了一会没想出来如何做,以为只计算第一个产生贡献的 AB 即可,但这也是错的,只好痛心去做 C 题。

这个时候就感觉万念俱灰了,B 题甚至不知道暴力如何判括号序列的正确性,想的「正解」还差一点,但数据一大出错概率就急剧上升,可能只有 \([0,5]\) 分。

在今天(2021/10/24,Day 2)早上起床时模模糊糊想到了方法。设经过至少一次 ABASB 转移方式的方案为 \(f_1\),而只经过 (AS)(SA)(A) 方式的方案为 \(f_2\),那么 \(f_1+f_2\) 就是不重复的超级串数量。

可以看这篇题解,归纳的更加清晰,为什么大家都这么强啊。。。

C 回文

直接打暴力,发现是 \(O(2^{2n})\),准备优化到 \(O(2^n\times n)\),但考场上写的程序死活有问题,慌得一比。发现 C 题乱搞明显更可做,后悔了。。。

就这样渡过了最后的半个小时。D 题弃疗力。

Day 2

起床和「llmmkk」交流了一下 B题做法,发现他和我的想法一模一样,用的避免重复的方法也是假的,第二个样例也输出 28,我艹。

被「Gyan」叫去打球,本来担心不放我进学校,然后发现大门直接开着的,我穿着校服进去管都不管。拿着个球拍感觉好重,挥不动,我谔谔。

到了机房,发现洛谷上一车人过了 ABCD 题,感觉一等线至少 140,无望了!


晚上 10 点,代码出了。去洛谷测了下,第二题爆零,128 分。

Day 3

有道小图灵出了估分,发现 1= 线比想象的低,然后用 lemon 跑了下全省的其实差不多,感觉好一点了。

Day 114514

最后分数 128,勉强骗了个一等。

posted @ 2021-10-24 11:33  huaruoji  阅读(264)  评论(2编辑  收藏  举报