SYSCPC 2024 游记

· · 生活·游记

SYSCPC 2024 游记

二零二四年十二月二十二日,星期日。

早上六点起床去纪中,七点钟发车,九十分钟后抵达中山大学。

大学城,真的是一座城市。如果不是周围的建筑上写着“教师公寓”,以及看到写着“中山大学”的大门,还以为在普通的广州市区。

到了赛场,比赛地点的机房和在纪中的机房一样,都是 403。纪中一队、纪中陆队、纪中二队在五楼。

跟金钩爷 lnw143 和 ZnPdCo 沟通,观察到三个人带了三本字典,其中有两本都是牛津高阶词典。最后只留下一本牛津高阶。

发现桌面上有三个保温杯,应该是礼品。还有一个泡沫板,猜测是插气球用的。

环顾四周,都是大学生,相比一定很强吧。

纪中十队作为打星队,三个高零选手,显得特别弱小。

整理桌面,铺开草稿本,一切都跟做模拟赛一摸一样。打开笔盒,拿出铅笔。

没带笔芯。

这意味着在比赛时将不能用自动铅笔。这对于平时习惯于用铅笔打草稿的人来说简直是最为致命的打击。

引发了不安

还好有提供 A4 草稿纸,而黑笔在这种纸上写字还算顺畅。

九点。比赛开始。

翻开纸质题面,A 题是对三个数取 \min,一眼秒了。

ZnPdCo 负责这题的实现,写完登录完账号后,直接交,过了。

但是打代码时出了点问题,键盘是坏的。找工作人员换了一个键盘。

E 题是水题?lnw143 看榜上有一车人过了。就猜。在草稿纸上把三个样例画出来,突然意识到:只有最左边和最右边全是 0 时,Alice 才会输;否则都是她赢。

lnw143 负责写。交题的时候交到 B 题去了。再交一遍,没过。一看代码,Alice 和 Bob 写反了,没测样例所以锅了。修正后直接通过。

自此,每一次交题整个队三个人都会一起看着,并且把所有代码都单独建一个文件夹放在桌面,以防误触。

他们认为 C 是大模拟,是平衡树板题。码力不行,看 K。

不知道在想什么,想到把 (a-b)^2 拆成 a^2+b^2-2ab,前两者都是好算的,直接枚举 ab 即可。后面的 ab 部分,把容斥式子写出来后,发现可以枚举 a-b,特殊处理掉 a=b,就可以做了。

写代码,途中出现了一点问题,没过样例,就先把电脑让出来,在草稿本上手玩样例二。发现算 a^2b^2 的贡献时没有容斥。然后就去修改代码。

过了样例后,就去交题。三人围在电脑前,祈求着 danielqf 保佑。

求求你

绿色的 Correct 显示在通过记录上,此时三个人都有过的题。

D 题挺简单?好像很多人过。思考。

不知何时,在开大数组后,两位 HAK 齐心协力把 C 过了,成为打星队首杀。

思考。化期望为概率。求 \sum_{x\neq rt}{sz_x\choose 2}。它等于 \frac 1 2 (sz_x^2-sz_x)。换根 DP!

在草稿纸上把 DP 式子列出来后,就跑到电脑前敲。没过样例。

哪里出错了?此时 HAK 在激烈讨论 L,虽然被标记为不接受,但仍然没有放弃。好像是修改了一个判断语句后就通过了。

换根 DP 中维护 \sum sz_x 的部分写错了。把公式改了一下,就过样例了。

然而还是 WA。

金钩爷用神秘语句测爆 long long,发现 n\times n 的时候,n 没开 long long,所以爆炸了。改了以后就 A 了。这启示了在答案会爆 long long 的题目里,要仔细搜寻每一个乘号,千万不要爆 long long。

整个队伍好像没有思路一般,空着个电脑不知道干什么。lnw143 说要看 G 题。

区间,a_i-d 的异或和。

此时,左边的大学生队伍中,传来了一些有用的信息:

“可以把减法改成加法。”

是的,值域是 [0,2^{17}),用补码把减法改成加法。

以及一些更有用的信息:

“现在的问题是把十进制转换为二进制。”

大抵是为了异或操作吧。

“你用 unsigned int 存就是二进制了。”

答案在 [0,2^{17}),不会爆 int。

异或,考虑拆位。要数区间有多少个 a_i+d2^i 位上有值。这感觉好熟悉。

看见了歪曲的

ARC092D,当时 VP 的时候因为没有考虑两个 [0,2^{28}) 的数加起来可能在 2^{28} 位上有值,吃了两发罚时。刻骨铭心。这道题的做法也记得。

相当于求 \sum_{i=l}^r [2^i\le (a_i+d)\bmod 2^{i+1}<2^{i+1}],可以把 a_id 分别对 2^{i+1} 取模后转换为 2^{i}\le a_i+d < 2^{i+1}\or (2^{i+1}+2^i)\le a_i+d < 2^{i+2},相当于求区间中值域在一个区间的数有多少个。这可以离线下来用树状数组求。

打代码,暴力是对的,但是输不出结果。ZnPdCo 说树状数组在插入 0 的时候会有问题,于是 ++x 解决。但还是过不了样例。

把电脑让出来。打印代码。盯着它看了若干秒后,发现树状数组用差分求区间和的时候,写了 r\le 0 时返回 0。改过来后过样例。在三个人的祈祷中,通过了 G。

越是清醒反而越加沉溺

这启示了在代码有问题的时候,要通读整份代码,可能就是一些本来不会出错的地方出错了。

J 也很简单?lnw143 说这是数位 DP,但是没有打出来。和 ZnPdCo 讨论出来了一个写法简单的贪心,写,然后过了。

此时刚好封榜,十三点。榜上有一车人过 F,于是思考。

想到了答案相当于把所有合法的串的字典树建出来,边数乘三减去深度。

lnw143 发现了,合法的串的出现次数一定等于出现次数最多的串的出现次数。

lnw143 还发现了,不被其它合法串包含的串的字符集一定是互不相交的,并且每个字母至多会在一个串里出现一次。

lnw143 还发现了,如果把原串中相邻两个字母连一条边,“不被其它合法串包含的串”一定是一条链。

主动请缨,持笔写 F,经过一些调整后总算过样例了。

如果过了 F,那么就有九题了。

但是 WA 了。

调试!只剩半小时了,只有这一条路径可以翻盘。

最后的可能性,请你一定抓紧

只剩十几分钟了,对拍来不及写了(?),只能静态调试了。

三个人盯着代码看,因为码风奇异,ZnPdCo 和 lnw143 都说不好调试。导致找不出问题。

没能压哨绝杀。

和 aaainoPr 一样,本来有九个,因为神秘原因,第二个被标记为不接受。

我是罪魁祸首

问了机房一圈,发现大多数队伍都过了八题。CHAK 甚至过了十一题,简直不是人。

滚榜的时候,发现由于罚时太多了,导致差几名达到金牌分数线。

回顾这次比赛,感觉上比上一次 VP EC Final 2022 时配合更加默契了,不会互相抢电脑。而且想题时主动出击,做完一题立马想下一题,不会闲着浪费时间。上次 VP EC Final 时,看到 B 题会做就一直死磕,因为做法有巨大的漏洞,但是一直轮不到上机,不清楚时算法的问题还是代码的问题,导致一直干坐着,而且没有进一步地思考更好地解决方案,浪费了时间。

要通读题目。可以一开始不看完所有题,但是一个半小时内一定要把每一道题目都看一遍。这次听说 H 是水题,不过开局没人开,中途别人看没人过也不看,导致简单题被漏掉。

不要吃太多罚时。以前一直不太重视罚时,以为只要过的题多就可以了。但这次的成绩给了当头一棒,都是过八道题,有的队伍罚时少,就有金牌,而罚时多的题只有银牌。昨晚 ABC 也是,G 题做不出来,前面罚了 3 发时,导致垫底。

曾今那个在赛场上做 CSP2023 结构体,过编就过大样例的人,现在去了哪?CSP 前做了一下,用时差不多,但是多了很多无谓的调试。写代码前思路一定要很清晰!写代码时一定要很仔细!

整个队伍最大的弱点就是我,我那糟糕的代码实现能力,以及诡异的码风,使得整个队伍没能在最后一个小时内过掉 F。如果换成 ZnPdCo 或 lnw143,或许就能过了。至少不会三个人都调不出来。lnw143 说我要改变一下码风了。为了集体的利益,决定在今后,整改写代码的习惯。

不要因为我的问题影响了整个队伍的成绩,这周内,每场模拟赛的代码都要经过 lnw143 的审阅,让他监督我的码风修正。

周四就要参加 EC Final 了,希望下次比赛纪中的队伍能发挥得更好,danielqf 能继续保佑纪中十队。