ICPC-2022-ECfinal-上海 总结
George_Plover
·
·
生活·游记
此生最后一场 ICPC。
打铜了。rank 100+。
这篇总结会从尽量客观的角度来复盘比赛。
赛前:
从我自己的角度,赛前4个星期的时候开始投入大量时间到训练中。
- Week: -4 :我连续刷了七天的Codeforces,包括但不限于 VP contest、gym 补题、找专题刷。
- 周六和 ljy & ckh 练了 ucup-6 ,10/13,这一场签到题和原题比较多,我写了其中6道题,贡献一发罚时,ckh的前期题罚时较多,ljy和他一起看了很久的代码。
- 周日和 ckh 一起打了2022济南,8/13,这场训练中比较dirty的题目:ckh在前期一个二分题目D上面WA了3发找不出bug,我重构之后通过。我在一个细节较多的dp题上WA了3发,通过阅读+调试找到问题后通过。ckh在一个几何细节题上WA了2发后通过。
- Week: -3 :休息了两天之后继续刷 Codeforces。
- 周六和 ljy & ckh 练了 ucup-7 ,7/13,这一场是ocpc camp题,数学题专场+结论题专场。这一场因为我一个等号写漏,造成了一道题长时间卡住。对此做了总结和反思,加强了对此方面的注意。
- 周日和 ckh 练了 ccpc-final 2017 , 8/11,dirt比较少。
- Week: -2 :刷 Codeforces,以及单挑vp了一些比赛。
- 周六和 ljy & ckh 练了 ucup-8 ,来了几个老队员一起切磋,6/12,我写了其中4个题,ckh的E题WA了3发后卡了一会儿,ljy重构做法TLE了,我看了之后,对ckh的做法提出建议改进精度后通过。之后C题也比较dirty,ckh没开int128,再加上int128没改完,造成其中2发罚时。
- 周日和 ckh 一起练了 2022香港,8/13。我开局的签到题传达给ckh的时候没有到位,导致ckh提交了一个错误的公式,WA了1次。之后ckh把一个结论很简单的K题想复杂了,因此WA了3次,我看过之后给出了较为简单的结论,修改之后通过。ckh写B,WA了2发;我写数据结构E因为初始化WA了1发。我写高精度F题,加法细节写错,WA了2发,调试了较长时间。
- Week: -1 : 我把 ucup-8 补到了 12/12,ckh也补了若干题。之后我练了一场Div2,然后主打休息调整状态+放松心情。
赛前稍微熟悉了一下操作系统,并且学习了一下常用的编译命令和bash脚本。
赛前的训练,我能够感受到我个人的手感提升,以及心态上的调整。
虽然还是会暴露一些愚蠢的bug,但这个过程中都收录并且做了总结。
体现出的问题:
热身赛:
做了2道题,第三道题因为我们思路的遗漏卡了很久,再加上不完善的剪枝,没有当场完成。
测了一下机器环境和现场情况:
- 有VS Code,并且安装了code runner,括号匹配等插件,挺好的。
- 评测环境不会有PE,对行末空格和多余回车都不敏感。
- pragma O3 几乎无效
- 打印代码的递送大约30s
- 评测机的 RAND_MAX 是 2147483647
- 探讨比赛策略:
- 要求ckh前期题写之前必须讲一遍做法,再决定谁来写这个题目。
- nsh多读一下题目,找可开的题。
- ljy自行看题做题。
现场赛:
赛题总览:
- A:?
- B:?
- C:细节比较多的数位dp
- D:开局看了一下,大概是个字符串题
- E:代码比较短的几何题
- F:排序算法+一些智慧的交互题
- G:9s的毒瘤题,没看过
- H:简单的宽搜题
- I:最短路+分类讨论
- J:结论+树结构叶子数统计
- K:网络流题
- L:有细节的构造题
- M:签到
比赛情况:
通过:5/13 CFIJM
排名:111/279
铜牌
比赛回顾:
$\color{black}【00:10】$ nsh开始写M。
$\color{black}【00:16】$ nsh发现没过样例,于是看了一下样例,ljy继续写C
$\color{green}【00:19】$ nsh改了两行M,过了。ljy继续写C。
$\color{black}【00:48】$ nsh和ckh讨论之后感觉L的构造比较可做,猜了一个感觉比较靠谱的构造,nsh写L。
$\color{red}【00:57】$ L提交之后WA,ljy继续写C
这里我其实继续想了一会儿 L 的可能错误点,ckh读了 J 题并且得出一个结论,给我讲了一下,但是传达题意有误,我并没有听懂他的结论怎么来的,注意力继续在L上放了一会儿,然后去看F。
$\color{red}【01:02】$ ljy的C提交,WA;ckh写J(树dp的想法)
$\color{red}【01:16】$ ljy看代码发现了点C的问题,改了一下,提交后WA,ckh继续写J。
$\color{red}【01:23】$ ckh交了J,WA。ljy改C。
这个时候我再次去问ckh的 J 题的题意,于是乎开始有效沟通,才发现他的结论是错的,我很快纠正了他的结论,并且发现了题目是一个简单的叶子计数。
$\color{black}【01:28】$ ckh上机改J(此时是正解)
$\color{green}【01:30】$ ckh提交J,过了。ljy继续改C。
这个地方已经慢了很多了,如果早点看J并好好确认题意的话,30分钟内解决这两个签到才是应该的事情。
$\color{red}【01:33】$ ljy提交C,WA。
$\color{black}【01:41】$ nsh上机写L,因为ckh发现 $n=3,m=3$ 的时候有特例。
$\color{red}【01:48】$ L提交,WA了。ljy继续调C。
这个时候我们发现L题其实过的人很少,于是就决定先放弃L题,跟榜去看 F 题。
F题是一个比较 trick 和需要变通的交互题,我和 ckh 很快想到了4次询问可以比对两个元素。
考虑到 ljy 的 C 暂时没有拍出问题,我决定先上去试试比对+归并排序+记忆化。
$\color{black}【02:03】$ nsh 上机写 F
$\color{red}【02:24】$ F 提交,常数不对,RE。
我写 F 的这个期间,ckh 和 ljy 讲了 I 题,有一个非常正确的思路。
之后ckh写I,但是第一份代码他出现了三个问题:
* Dijkstra 没加 long long
* 没有考虑终点在半径内的情况
* 没有枚举第一步触发传送的所有走法。
> 于是经过3发罚时,修好了前两个锅,最后一个一直修不好了。
>
> 比赛结束后想到了hack数据
>
> ```
> 5 4 3 10
> 1 2
> 2 3
> 3 4
> 4 5
> ```
>
> 如果用ckh的算法,答案是34,而正解是36
$\color{red}【02:54】$ ckh的I提交,WA 。
$\color{red}【02:57】$ ckh 的I改了下 LL 再提交,WA。
$\color{green}【03:03】$ nsh 和 ljy 一起看 C ,发现变量名写错,改后 AC 。
$\color{red}【03:18】$ ckh 的I补了一种情况,但还是 WA 。
$\color{red}【03:55】$ nsh 重构 I,WA。
$\color{green}【04:09】$ ljy 交 F,过了。
$\color{green}【04:22】$ nsh 改 I,过了。几乎同时,ckh 发现了 L 的一个 corner case
之后一直调 L ,最后10分钟 ckh 上来 rush H,但是来不及调代码。
我的L在修补丁的时候也因为忙中生乱,写错了地方没来得及改完。
#### 总结
* 有种打假赛的感觉。
* 对于构造题L和交互题F,过于相信直觉,开的太早了,导致前期卡题太多。倘若早一点和ljy一起看C题,优先把柱子解决掉,可能更有利于L和F题的解决。
* 然后I题也是过于相信直觉,导致代码的实现和实际的做法没有完全契合,出现了”心口不一“的情形。
* 另外,没有落实赛前的策略:让ckh把题目给一个人讲明白再开始写。比如J题ckh最开始的做法是不对的,但我没有听明白,仅仅因为在思考别的题,就让他先上去写了。写完之后WA了讨论了才发现有问题。
* 我觉得ckh的优势在于很多问题能一下子想到靠谱且正确的初步思路,但是这个思路在细节上通常和正解有所出入。以及容易把简单问题看错或者复杂化。
* 赛前一段时间我经常拉着ckh加训,希望能提升他在前期题目上的准确性和稳定性,但是看起来效果并不佳。
* 我觉得很有可能过去的这些加训都是无效的加训,有数量,但没有质量。
* 之后还会有一场CCPC-Final,经历这场大败之后,做出调整是有意义的。
* 不过我要先搞完毕设再做准备。
----
### 部分题解:
这部分补题开放之后会慢慢补上。