2020ICPC上海站复盘及近期打算

上海站


吐槽

必须吐槽六百八十多个队的比赛太难打了,金牌还是只有35个。幸好最后还是凭着封榜过两题拿到了25名(可能前面还有打星?)。8题还好没被榜首虐的太惨。

赛后我才知道那两盒核桃是上海大学寄过来的…我还以为是队友拿过来的没好意思吃。

复盘

开题顺序:G-B-M-D-C-H-I-L
没有特别难写的题,基本上过题顺序就是开题的顺序。

G 是签到题。

B 稍微有些思维含量。但只要发现取反后数字之和不变,就很容易做了。赛后想到如果把数字之和看做“雷-非雷”边的数量,这个性质就十分显然了。最重要的是A棋盘肯定不是白给的,所以答案肯定和 A 有关。

开 B 之前和邱学长讨论了下 D,hack 掉了几种做法。现在回想当时 D 应该能直接做出来的。应该是当时场上正确率很低,搞得我畏手畏脚的。

M 签到题2。

D 也不难,考虑 A,B 两个人分别到达哪个端点即可。除了 A 到达左端点,B 到达右端点之外,其他的情况都可以快速计算。在这种情况下容易发现 AB 所用时间相同的时候总时间最小。因此解一个方程即可。

C 观察发现式子之和 i or j 的最高位有关。枚举这个最高位 k 以后就是求 i  or  j = k i \text{ or } j = k i or j=k ( i , j ) (i, j) (i,j) 对数,显然是个数位 DP 问题。没看见取模贡献两次罚时。 O ( T l o g N ) O(TlogN) O(TlogN)

H 这时候场上还没有几个队过这个题,我们又一次下意识感觉这题挺难的。但实际上两步转化都比较显然,也不知道别的队是卡在哪里了。首先饭和干饭人互不相交,枚举第一个人对应哪碗饭,所有人就都知道吃哪碗了。这时候,每个人的要求就变成了要存在某一时刻桌子顺时针转 k i ( 0 < k i ≤ n ) k_i(0ki(0<kin) 次 (成为正要求)或者逆时针转 n − k i n-k_i nki 次(负要求),只要一个满足就可以。显然是满足若干小 k i k_i ki 的正要求和其他的负要求,枚举这个“若干小”即可。复杂度 O ( n 2 log ⁡ n ) O(n^2\log n) O(n2logn)

I 就是暴力做,不大好写,调了挺久。

最后本着试一试的心态做了一下 L,先猜最优情况只有一个转折点(大概率是对的),然后枚举对角线上下几个点作为转折点,没想到过了。其实最后狂 T 的时候我就觉得可能能过,因为根据哥德巴赫猜想,这样的解肯定不会很大。

至于证明,我们先证明如果只有一个转折点 C,那么使得 AC + BC 最短的转折点一定满足题目要求。假设最优的 C,且 AC 上有整点 D,那么 AD + BD 一定更短。那么更进一步,“只存在一个转折点”的结论就显而易见了。

为啥在考场上就没想出来这么精妙的证明…

然后就是在场上没想出来的 E。场上考虑了构造的过程,可能太累了,竟然没想出正解。正解就是考虑当前最小元素只能放在前 k 个位置,它前面的随便放,后面的是一个子问题(离散化后),这个 dp 推推式子就能优化到线性。

总结

这事本赛季,也是高二退役以后第一场正式比赛。ACM 还是和 OI 赛制有很大的不同,对代码量和算法的要求相对少些。但很明显对思考能力要求更高,而且对思维敏捷性和手速的要求也更高。因为如果没有压倒性的实力,最后都是要靠着罚时取胜的。这场比赛,即使最后我们没做出 L,那么凭着罚时的优势也能苟住一块金牌。

这次没有遇到卡题的情况,但总是无法避免的,这时候队友的分工和机时的安排就显得至关重要了。

近期规划


这周的南京站不打,下一周的济南站组一个新队再次以打星身份参赛。当做娱乐赛来打,成绩没有那么看重,主要再积累一下经验。而且这可能就是我明年的队友了。

然后趁着没有考试比较闲,暂时休整一下,不打算熬夜打比赛了。想学学 JS,看看能不能开发个微信小程序。因为上周 MSC family 里人写了个带圣诞帽的小程序,搞得我也蠢蠢欲动。

距离回家还有44天…

你可能感兴趣的:(游记与总结)