虽然含金量不如 xcpc,但是 C4 是个人感觉打得最爽的系列赛(暴力大赛?)。在现场赛纷纷转线上的大背景下,有幸复活,感谢主办方给机会!从不完全数据来看,本场应该是世界上规模最大的在线比赛了(?), Memorable!

回顾

头一次的 C4 是校内选拔赛,也是唯一一次校内夺冠。虽然只是拉了点原题打打 vj,然而选拔赛打不过队友,校赛打不过另一个队友,所以只能🐶C4了?于是进了一队,进去发现除了选拔赛打了前二,剩下的全**黑幕(大雾)

那一年的 C4 有预赛和决赛之分,所以预赛的题比较水,3-1 还出了个高中物理。决赛倒是比较难的,不过因为学校没钱,只去了一个队(10 个人绿皮火车去杭州,已经浩浩荡荡了,30 人不敢想),成绩又是算三个队总和的,所以倒也无所谓,主要还是旅游了。

之后两年的 C4 就没有决赛和旅游了,先给差评。题目难度也有调整,尤其是去年槽点很大的 L1 字符串专场。不过由于 Codingame 打得多,所以倒也能从容应对,不过给 Python 就更好了(?)。但就全队或者全校来说,不能拿到 L1 大部分分数的情况长期存在,进一步导致没有时间开 L2 可做的题。今年赛前据说要冲国一,于是吸取了往年某些同学一分不骗的教训,以及应学弟的邀请给大家简单讲了些技巧,见附录。

赛前

今年线上 C4,监考用的 OMS。其实因为没有参加过 PAT,也忘了前一年有没有用了,所以四舍五入就是第一次用。之后一个最大的问题就在于:OMS 不支持 MacOS,于是赛前的晚上临时顶上一个 Surface Pro 6,并且现配环境。由于之前种草了 Windows(可能是 Windows Terminal 和 W$L2),所以这次也顺便体验一把。

然而因为规则说不让用虚拟机,为了避嫌首先排除了 W$L2。编辑器毫无疑问,上 VS Code。编译器则是向学弟分别要了 MinGW-w64 和 jdk1.8,所有 C4 支持的语言都是要安排上的。之后装个 Code Runner 就有很正确(?)的参赛体验了。

然而由于先启动了 VS Code 再配的编译器 PATH,结果不管我怎么重启里面的终端,都不能正常找到编译器。然后尝试把默认的 pwsh 切换回 cmd,再在 VS Code reload window 也不行。最后 PaperCube 学弟提醒在 Windows 上需要重启而不是 reload VS Code,新配的 PATH 才能生效,奥妙重重(后来想了想好像也是有道理的,这个 PATH 不是终端启动的时候设进去的)。

然后为了方便本地的一些计算,比如打表,还需要加装一个 Python。起手先从官网下了个,然而配了 PATH 依旧不能正常 work,甚至跳出了 Windows Store 推荐我安装他提供的 Python。那好吧,卸载下好的 Python,从 Store 安装,倒也好用。途中顺手装了一个 Windows Terminal,确实酷炫,不过装归装,貌似比赛用不太到。

因为是线上赛,所以更进一步再装点好的插件。用了挺久的 TabNine,这个确实很牛逼,个人感觉能提升 20% ~ 30% 的手速,装。之后又测了各个语言编译运行是否 work,顺带装了一圈各种语言推荐的插件。然而后来觉得竞赛不需要这些多余的 Language Feature,事实上只有自动补全就足够了,于是又卸载。额外装了 Jupyter Notebook 插件,感觉 REPL 的方式跑 Python 可能会更方便一些,然而pip install过去了一百年。

另外测 OMS 的时候发现自己没有查看相关的邮件,差点 gg。大概流程是用手机微信小程序扫一个码,然后再扫本机 OMS 的码,然后把两个码的信息集中上报,通过审核就进系统了。

赛中

开这篇的目的似乎主要是吐槽 Windows?反正我是第一次写这种比赛时的体验,因为正常来说没什么好写的,要不然就啪啪啪敲啊敲,要不然就罚坐。虽然说是做了如上的准备,但还是架不住 1. Surface 的触控板太硬,不习惯; 2. 不分 Command/Ctrl 键,还是拔草了。不过也有优点,例如进入比赛的时候可以用触摸屏点击进入,节省了移动鼠标的时间。

主办方给了过多的赛前准备时间,于是产生了开赛先罚坐的场面。当时感觉手有点冷,抢先锋怕是抢不过牛逼网友了。果不其然,进比赛后虽然找到了最好写的 2-3,然而没有想清楚就开始写,第一发想挫了没有得到满分,注定是抢不到先锋的 qwq。于是在上面浪费了 20 分钟,然后冷静了一下用 5 分钟重写了这题,一次性通过了。

之后准备回去开 L1,瞄了眼榜发现 PaperCube 写了 25 分的 3-1,心想这把有的玩了。L1 意外地很顺利,可能是题水了,一路输入输出输入输出,用了 40 分钟左右拿了满分。20 分的题题意有一些迷,但是枚举题意就可以过。后来据说 L1 有题目输入数据有锅,很神奇地没有被坑。2-1 也是水题,不过题意没怎么看清楚,搞不清楚到底是正着算还是倒着算,枚举一下题意就过了。之后看了下 2-2 是个模拟,2-4 是个图论(?),选择了先开 2-4。定睛一看是个假图论,存一个邻接矩阵按题意模拟就行了。

这个时候看了看总榜,队伍从二等跳进一等区域了,然后感觉 L2 分够了,就先去领了 3-1 的白给 25 分。回去写 2-2,大概用了 20 分钟,不过可能是题意没有理解到位,总是差两个点过不去。而且更过分的是,枚举了几种题意,永远是差那两个点。这时手上开了但没有满分的只有 2-2 和 3-1,就去看 3-1,发现是一个 TLE 一个 WA。由于只剩 5 分,就不打算修 TLE 了,但是也没看出来哪里 WA 的,遂又作罢。

又看了看 3-2 和 3-3,结合榜单自认都是神仙题 + 有可观的暴力分。回 2-2 继续枚举了下题意,多给了 2 分,但还剩的 2 分就怎么也枚举不出来了。看了看还剩 40 分钟,看题面以为 3-3 有什么奥妙之处,于是按「随机」的题意交了个$\frac{2^n(n-1)n}{2}$,还以为 C4 总算快速幂派上用场了,然而并没有。不仅快速幂没有派上用场,预先装的 Jupyter 也没有派上用场,本来只是想算个式子,结果打不开了(也许是因为后来卸载 Python 插件的缘故)。不过这里点名表扬下 powershell,提供了计算表达式的能力,比 bash 不知高到哪里去了

3-3 骗不过去,也想不到怎么暴力,就去搞 3-2。3-2 写了个multiset+lowerbound暴力,然而调样例一直没过。最后去掉了引用,神奇地过了样例(我不会 C++,所以没想明白这是怎么回事),交。然而给了 0 分。样例怎么测都是对的,纳闷了一会,在比赛结束的最后时刻发现多打了一些调试输出,立马删除重新交。比赛开始的时候没有机会欣赏,在最后时刻看到了上万长度的评测队列,心想要是刚才没改对咋整,于是又多交了一发。比赛结束后返回了 18 分,对我来说可以算是完美谢幕了。

嗯,总结就是:Surface + Windows = 不太好使,枚举题意 + 暴力模拟 = C4。以及验证了 Competitive Programming 只需要 Autocomplete 的想法(从准备和结果上来看)。

附录

以下记录了赛前给学弟的 C4 要点分享。

尽量多写题,不要求非得 AC

  • L1 100 分,拿 95
  • L2 100 分(4*25),拿 75
  • L3 90 分(3*30),争取拿 45

套路

  • 读含空格行,一般在 L1 有一道。向 PaperCube 请教下 stringstream
  • 并查集,一般在 L2 有一道
  • 最短路,一般在 L3 有一道。没有也可能用最短路歪过一些点
  • 快速幂(?),好像没用

先锋注意点

  • 先锋是按 level 算的,不是按题的!!
    • 如果要抢,先看清楚哪题好写
    • 如果要抢,只写一题
    • 要不要抢自己评估。前提是 L1 有把握

科学得分

  • L1 一共 8 题,一小时搞定。少 a 几个小点不那么重要,除非不够进阶分并且就差你了
    • 当然一小时过去 L1 还有题没开的话,一定要写
  • L3 爆搜能上直接上,但是不大好过样例的大模拟要谨慎
  • L3 一般有一个输出样例能过的点。如果答案值域比较少,能随机一把多拿个点更好