2024.11.6
FZU 申请到了 2024 ICPC 昆明站的一个额外名额,并分给了我和另外两位同学。感谢傅老师!感谢实验室的各位伙伴们!
Day -1
坐飞机飞往云南,云层之上的晚霞很美。
晚上九点多,和队友 vp 了一把 2024 北京市赛(这是我们队的第一次训练 ...),由于比较晚了我们打算只打两小时。
开场先看了 H,很傻很天真地以为深度不减就合法,交上去一发 WA 了。玩了一个样例,发现并不简单,至少没有我想的这么简单,遂搁置。
和队友一起看 K,一个很明显的贪心思路就是,每次选最小的数 \(\times 2\),直接模拟显然会超时。很快注意到,若 \(\max{a_i} \leq 2\min{a_i}\),则操作顺序有很明显的循环节。告诉队友这个事情并交给他们写,他们非常稳的实现了这个做法。
接下来双开 D, H。D 也有一个很明显的贪心,不过不好支持修改。H 想了一会,想了一个虚树的做法,不过看起来很难实现,遂搁置。继续看 D,发现 \(i\) 是否对答案有贡献只取决于 \(b_i\) 是否在 \(b_{i - 1}, b_{i + 1}\) 构成的路径上,上机简单写了一下就过了。
很快两小时就到了,除了 H 一发没罚,挺好的。
Day 0
十点到达 YNU,太美丽了 YNU!绿化做的很好很好。
在签名墙上留下了我们队的队名 fall for a town
。
签到后就打算在校园内四处逛逛,看到其他选手骑着电动车畅游 YNU,我们也打算骑着电动车爽爽。费了好大功夫才成功解锁一辆电动车。人生中第一次骑电动车,没想到一上手就知道怎么骑了,EZ。
YNU 超绝上下坡啊,闭上眼哥们还以为自己在秋名山,骑车的时候满脑子都是 " 86 上山了 "。继续骑车逛了很多地方。
十二点半的时候去了食堂吃饭,歇到一点半就出发去场馆了。
下午两点半的热身赛,拖延到了两点四十五分开始。
上海站的时候几乎全程坐在主机位,感到压力山大。于是这次我把自己换到了三号位上冷静。
A 就是 A+B problem。B 一看就知道要优先处理 \(w\) 较小的,不过暂时没想到什么好的实现方式。与此同时得知队友 B 做过原题,就让他来上机写。
在 00:25:03 的时候顺利过掉 B。队友接着来看 C,得知队友 C 也做过原题,就让我上机体验了一下交互题,在 00:38:02 的时候顺利过掉 C。
接下来看 D,一眼不会,我行列式的知识储备还是很浅的。先让队友推了一下 \(n = 3\) 的链,得知答案是 \(a_1(a_2 - a_1)(a_3 - a_2)\)。然后将这个式子带到样例 \(2\) 发现不太对,说明 \(p_i\) 确实是对答案有影响的。尝试把这个式子的某个地方改掉,将 \(a_i - a_{i - 1}\) 改成 \(a_i - a_{p_i}\) 试试?发现样例 \(2\) 对了。于是告诉队友这个式子并让他们写写试试,发现成功的过掉了样例 \(3\)! 00:57:40 交上去也是稳稳过掉。
后面一小时玩了玩机子,对 Linux 稍微有点熟悉了。想随便打印些东西,留下我们热身赛的痕迹,于是就打印了 xie xie zhi yuan zhe! thank you, volunteer!
,志愿者哥哥有点绷不住了:" 你们队的代码很有风格 "。
热身赛一发没罚,排在金尾两名,挺好的。事实证明把我放在三号位上冷静是很好的选择,前面的题可以无脑相信队友。
热身赛后一个半小时被华为讲座硬控,哥们又来做了一回抽奖分母。
晚上和两位朋友一起出去吃了火锅,This is true food!吃完火锅后,骑电动车回到了酒店,骑行的感觉很不错。
回到酒店后洗了个澡,把 2024 北京市赛 H 改了一下,再把上海站 E 改了一下。然后打了 \(2\) 把 LOL,被 \(4\times 2=8\) 头猪给气死了 ...
Day 1
九点半开场,开始先开了 G,有了一点初步的思路。七分钟的时候有队伍过掉了 M,后面陆陆续续也有队伍过了 M,于是回过头来看 M。
M 是个构造,手玩了一些样例,暂时没得出什么普适的构造。回忆起之前关于构造题的种种不悦,和队友说明了一下我弱构造的情况,于是我们交换了一下题目,队友来开 M,我去开 J。
J 延续了队友 " 只有 Alice 先手,并且一步可以升序排序的情况下,才是 Alice 胜 " 的思路,这个结论也是蛮感性的,尝试证明了一下发现很对。并且敏锐地察觉到了 \(n = 3\) 的 corner case,上机写了一发直接过,此时 00:58:43。
M 队友通过打表并且观察得出了一个普适的构造,并且通过了他自己写的 check,交了一发也是直接过,非常好!此时 01:12:52。
在此期间,发现 H 是一眼题,不过我们队可能对 atan2
并不算很熟悉,稍微磨蹭了一会,但是非常稳地通过了,非常好!此时 01:58:12。
接下来,发现 C, G 都可以开。C 初步地想了一个根号分治的做法,不过 \(k > \sqrt{n}\) 的情况还没想清楚。G 结合开场的想法有一个很暴力的搜索,很想上机找一下有没有特殊的规律(事实上应该是要上去玩一下的,因为我们队此时没有对机时的需求)。
此时看榜,发现 L 的通过数逐渐反超 C, G,并且 dirt 率很低,说明 L 的思路是慢慢想可以想出来的。看了一眼 L,发现好像确实如此,于是我们队的重心就放到了 L 上。初步的思路肯定是让小的 \(a\) 与小的 \(b\) 配对,但很快就意识到爆炸可能会使得前面较小的 \(a\) 直接失去操作机会。大脑宕机了一段时间,突然想到可以将引爆操作放到最后,每个 \(a\) 都选择不会被当前爆炸杀死的最小的 \(b\) 即可,唉还是炉石玩少了。写了一下,03:31:56 交了一发 WA 了,有点不知所措。
整个队伍在此时有点凝滞了,我非常纠结到底是保一个 L 还是继续开 C, G 然后把 L 交给我的队友。最后我还是选择性地盯了几下 L,发现基本不是代码的锅,那就是思路的锅。不过整个贪心策略我已经证明过了正确性,看起来是一些细节没有判断好。
突然有一个时刻,队友提示我,会不会要先让 \(a_i\) 减去 \(1\) 再进行 upd()
。好像确实是这样。改了之后交上去还是 WA,有点束手无策了。再过了几分钟,突然意识到要先让全体的 \(a_i\) 都减去 \(1\)。再试了两发,终于过了!此时 04:30:01 罚了五发。
接下来在 C, G 中纠结,我认为 C 短时间没有很好的思路,并且就算有思路也不一定能在半小时之内实现。于是叫队友一起主攻 G,上机打了个表,发现 \(a, b \leq 5000\) 的情况答案最大只有 \(14\),意识到答案可能非常小。想着要不尝试写一个迭代加深的搜索吧,意识到自己并不会估计答案的范围(当时脑子有点坏了,直接选一个能承受范围内的最大值应该就可以了)。接下来的时间也都没有很好的想法,慢慢看着倒计时归零。
最终又拿到了铜奖。前期我们开题其实是很顺的,又遇到不顺的情况都通过团队配合解决掉了(在这里要特别夸一下我们队的策略,非常正确!)。可惜到了中期,特别是在 L 上花的时间太久了,在正常情况下花费的时间不能超过一小时的题却硬控了我这么久,如果可以省下一点时间再去想想 C, G,说不定一切会不一样。对不起我的队友们 ... 不过 L 我们在最后的情况下也没有放弃治疗,依然在积极地寻找问题,到封榜最后半小时终于成功 AC。
我们做到了!一切都是值得的。我和我的队友们都尽力了,凭自己奋斗换来的牌子,就算是铜牌我也认了。人总是会进步的,一步一个脚印,心里很踏实。
在场馆内呆到了滚榜结束,见证 " 哥哥来了 " 成功登顶!并且成功地要到了哥哥签名!不虚此行。
这个赛季也算是结束了,线下赛的体验真的很美妙,不过可能要回归文化课一段时间了,把高数与线代的基本功打扎实了,争取把英语学好。除此之外真要好好地练一练二分图网络流、计算几何了,希望可以成为一个六边形战士,期待明年更好的自己。