Blog of RuSun

\begin {array}{c} \mathfrak {One Problem Is Difficult} \\\\ \mathfrak {Because You Don't Know} \\\\ \mathfrak {Why It Is Diffucult} \end {array}

CSP-S 2021 游记

CSP-S2021爆炸记

蒟蒻第一次参加CSP-S,不必说,自然是炸了,机房还有 $A$ 了第一二题的巨佬 @mydcwfy,便更让蒟蒻瑟瑟发抖。

此刻,夜色已深,机房里的取得好成绩的巨佬们正在玩 generals,只留下蒟蒻一个人在默默地写下这篇记录蒟蒻在 $CSP-S2021$ 赛场上自闭的游记。

$Day -inf$

蒟蒻在弱省弱校,自然并没有很好的教育资源,教练将视频发给大家,大家便开始卷。蒟蒻自然没法赶上巨佬,在学习进度上一直落后于巨佬们。最后一周晚上停课,从星期三下午开始全天停课,连着之前国庆节 $7$ 天,一直在考试,蒟蒻一次比一次考得差,在考试的前两天,一次考试中只得了 $35$ 分,直接自闭了,但是巨佬们依然稳定在两百多分,下一届是从小学开始学的,参加提高组的初三同学都过了初赛,而蒟蒻昨年连初赛都没过,我觉得我要被单调队列了。

$Day 0$

上午还在考试,考到中午食堂都没饭了,便去学校对面的商场里吃烤肉自助餐,导致今天上午肚子很痛,还好考试的时候没有发作。

下午去现场试机,三道图论题,一道很多巨佬都想出来的题,蒟蒻没有想到,只打了暴力。还好试机没有成绩,不然蒟蒻又要考前自闭了。

吃完饭到九点钟,在机房里听了一场 $Beyond$ 的演唱会。

晚上和托管的同学玩大富翁,玩了两局,都是第一个破产的,心情跌落到了谷底。他们聊天聊到了两点钟,蒟蒻没有睡好。

$Day 1$

早上边听歌边复习,感觉什么都没复习到,尝试把扫描线打出来,$WA$ 了,只有二十分,心想就摆烂了。

下午早早地到了考场,学校的门前放了宣传海报,所有人等着两点钟进考试,便只能看这个。机子和键盘还是蛮熟悉的,所以没有太紧张或好奇。

拿到题了之后,便开始看。虚拟机里面如所料的没有完整的 $vscode$ $c++$ 拓展,所以没法用,连基本的补全功能都没有,所以虚拟机的唯一用处便成了编译。

看到第一题,首先想到的是贪心 + 动态规划,但是想不出来怎么做,便先放一放,n <= 5000 只有 $40$ 分,这个暴力分实在是给的太少了,磨磨蹭蹭终于横下心来放弃了想正解,就去看第二题了。

结果第二题更毒瘤,事实上,如果由符号 * 的题目,我们是之前练习过的,动态规划/记忆化搜索是完全线性时间可以做的,但是有了 * 之后,合法规则立刻变得十分复杂,最暴力的做法 $ 3 ^ n$ 的复杂度,只有 15 分,便再放一放,去看第三题。

第三题,感觉应该是有一些规律可以寻,因为一共只有 n 种数,每种数出现两次,当一个数的位置确定了,另一个一定是可以确定的,我的思路大概到此结束了,于是先把这个题放一放,去看第四题。

至此大概用了半小时。

我耐心地读完了第四题(后来才知道一些巨佬根本没有看这个题),想到的大概是类似于 P2598 的模型,要计算所有黑点和白点交界的边的权值和的最小值,可以想象到,这些边一定将黑色和白色分割成若干部分,但其中一些权值是可以避免的,如果只分成为两部分,那么一些边可以节省,依然是合法的(即将一些颜色令为相同),那么我们就想到了将黑色和白色两种点切开,中间的边就是答案。便自然而然的想到了最小割(正在写的此刻完全不知道正解是什么,巨佬们不要嘲笑蒟蒻),将黑点和超级源点连边,白点和超级汇点连边,中间就是矩阵中的边,跑最小割(最大流)即可。大概在考试前几天,在完成随机绿题 $100$ 道,里面一道树形 $DP$ 的题我用了最小割,就恰巧复习道了网络流,于是我在考场两分钟就打出了正确的 $Dinic$ ,最开始用的 $vector$ 存边,因为有多组数据, $vector$ 可以方便地 $pop_back$ 但后面打网络流的时候想起了双向边编号 ^1 的性质,vector.pop_back 就没法用了,所有最后的解决方案是存两张图。几个稍大的样例都可以过了,最后一个在 $Windows$ 下我自己数了要跑五六秒,心里有点悬(忘记可以开 $O2$),于是就在虚拟机又跑,想起开 $O2$ ,使用系统里的 time 命令,得到时间大概 2.7 秒左右,觉得可以接受了,就走了。

离考试开始过了一个半小时了。

回头看第三题,不想再想正解,就打了搜索。有一个优化,当一个数的位置确定了,与它相同的那个数的位置也可以确定了,如果搜索到结果不合法,直接结束,可以过“大样例”,觉得 40pts 可以水到。做了近一个小时。

第二题就直接放了,再看第一题,我猛然发现暴力的复杂度是 $n^3$ ,连 40pts 都拿不到了,枚举两种各分配多少个,枚举每个飞机,枚举所有可用的(那个东西叫什么记不到了),最后的枚举可以用堆优化,选择上个结束时间最小的,复杂度是 $n ^ 2 \log n$ 。半个小时打完就走了。

第二题太毒瘤了,即使是指数级的暴力我都不知道怎么判读一个串是否合法,就索性直接打表样例,如果不是样例输出 $3 ^ {num(?)} $ ,即随便填的方案。

估分

$ 20 - 40 + 0 + 20 - 40 + 80 - 100 = 120- 180$,这是在第四题是正确的情况下,虽然所有样例过了,但我依然觉得很悬。

各个网站的成绩

A B C D Total
LuoGu 40 0 40 100 180
INF 50 5 52 60 167
Hydro 60 0 40 100 200
YouDao 40 0 50 75 165
JiSuanKe 40 5 40 100 185
Min 40 0 40 60 140
Ave 46 2 44.4 87 179.4

实际成绩:45 + 0 + 44 + 60 = 149