【游记】WC2021 咖啡记

其实咖啡就是拿铁的意思

Day 0

发现明天就是冬令营了但是我还什么都不会,已经差不多做好了要继续拿 Cu\text{Cu} 的准备。

去年的 WC2020\text{WC2020} 是我爆炸的开始。由于当时水平不行,所以省选成绩在当时的情况下还稍微能看。但 WC2020\text{WC2020}lindongli2004\text{l}\color{red}{\text{indongli2004}}Ag\text{Ag}Zcus\text{Z}\color{red}{\text{cus}} 差点 Ag\text{Ag},我却只有踩线 Cu\text{Cu},就很难受。

之后的 APIO, CSP-S, NOIP\text{APIO, CSP-S, NOIP} 全都挂成 sb\text{sb},令人自闭。

Day 1-4

第一课堂好难,第二课堂好 sb\text{sb}

这些边我不加,这些边我不加!暴力怎么做,暴力是不是!加边!加边!加边!然后,并查集查询!

上午:《随机算法》

下午:zyy:\text{zyy:} 随机算法没有前途。

lyx:\text{lyx:} 大家都掉线了?那我讲快一点。

捐赠(×\times)聚敛(✔)

啥都没学会,就记着些梗,吃枣药丸。

由于坐标 HN\text{HN},省选 A+C\text{A+C},所以省内没有安排考点。教练通知要带笔记本在会议室考试,惊奇地发现笔记本只有 windows\text{windows}

于是花了好长的时间装了个虚拟机并且调整成能看的样子…

发现自己真的什么都不会,慌得一批,于是疯狂复习复习复习。然而显然没用

Day 5

早上应该是按时到了?买了两根巧克力棒,然后随便找了个位置坐下来。

很快就开题了,右边是 Mentos_Cola\text{M}\red{\text{entos\_Cola}},左边是 Yuanchenpu\text{Y}\red{\text{uanchenpu}}。瞟了一眼三道题,发现果然和之前预料的一样,难度降低了不少的样子。

但是没有 C++11\text{C++11} 差评,好毒。

给了自己每题 20min\text{20min} 先想想,发现对于 bracket\text{bracket}fib\text{fib} 毫无想法,但是感觉 expr\text{expr} 是可做题。加上本人感人的数学功底,所以直接扔了 fib\text{fib},开始想 expr\text{expr}。冥冥之中感觉对这道题有一些印象。

十分显然的是要建立表达式树,然后变成树上问题。

十分显然的是要分位考虑。

十分显然的是不能二分。

此时突然灵光一现,记起之前给同学们出的一道十分简单的题,就是叶子上是 0/10/1,然后每个节点是 and/or\text{and/or},求根节点是 0/10/1 的方案数。

那就枚举好了,直接转化为上面一模一样的问题,直接做就可以拿到 55pts\text{55pts}

再加上 naive\text{naive} 的模拟,就有 70pts\text{70pts}

此时还不到 1h\text{1h},挺开心的。觉得 70pts\text{70pts} 还是比较赚的,于是开始码码码。一遍就码过了前面几个小样例,但是大样例 RE\text{RE},于是去上个厕所压压惊。遇到了 Zcus\text{Z}\red{\text{cus}},发现他的分好像已经吊打我了,方脏。

回来之后仔细 debug\text{debug} 发现有一个地方要用 int\text{int} 我却用了 char\text{char},溢出导致我的其他变量被修改了,

改了改就可以跑大样例了,复杂度是 O(nmE)\mathcal{O}(nm|E|),显然跑不过大样例。但是本机跑个 13s\text{13s} 就跑出来了,答案是对的,松了一口气。

于是开始想正解。回想自己的题,其加强版需要使用动态 dp\text{dp},但这里一次修改的 0/10/1 位置过多了,不能用。陷入自闭…

再仔细地检查了一下,确保自己不挂分。此时已经 2h\text{2h},还只有 70pts\text{70pts} 让我稍微有点担心。

于是扔了 expr\text{expr},转去想 bracket\text{bracket}。此时右边的 Mentos_Cola\text{M}\color{red}{\text{entos\_Cola}} 貌似已经爆切 bracket\text{bracket},搞到我的心态了。

不过下考发现他并没有过,所以我又双叒叕自己搞自己的心态了

仔细观察了一下,发现形如 abc\text{a}\rightarrow \text{b}\leftarrow{c} 且边上颜色相同的图形是十分有用的,但是仍然没有什么思路。

接下来就是 思考 \rightarrow 掉线 \rightarrow 重连 \rightarrow 思考 的循环辽,一直在画图但是一直没有任何思路…

再去上个厕所,遇到了初三神仙 juju\text{j}\color{red}{\text{uju}},发现他的分好像已经吊打我了,方脏。

回来之后稍微有了一些想法,观察发现 ab\text{a}\rightarrow \text{b} 合法和 ba\text{b}\rightarrow \text{a} 合法是等价的。同时如果出现了 abc\text{a}\rightarrow \text{b}\leftarrow{c} 的图形,那么走到 a\text{a} 和走到 c\text{c} 实际上就等价了。

那不就 加边!加边!加边!然后,并查集查询! 并查集将他们缩在一起就可以了?

手玩一下发现能过两个样例,于是开始码。

发现过不了自己手玩过了的第二个样例,艹。思考后发现是因为当一些点缩在一起之后,边也需要放到一个点上。

那不就启发式合并就可以了?写了之后发现跑不出来,意识到可能是重边太多了。所以把链式前向星改成 set\text{set},直接过了所有样例。

此时我仍然认为这是个乱搞,因为我并没有严谨证明为什么满足上述条件就完全是一个等价类。考后发现挺显然的

手造了一个极限数据,发现要 0.9s\text{0.9s},方脏。又双叒叕去上了个厕所,于是遇到了老 K\text{K},他的分显然吊打我,所以完全不方脏。

回来之后想着如何搞掉 set\text{set},发现如果有 C++11\text{C++11},直接上 unordered_set\text{unordered\_set} 就啥事没有了,但是没有,艹。

还是改成了 vector\text{vector},发现极限只要 0.2s\text{0.2s} 了,稳得一批。

此时已经 12:45\text{12:45} 左右,赶紧去 rush\text{rush} 了一个 fib\text{fib}20pts\text{20pts}然鹅忘了无解于是保龄了

接下来大概 30min\text{30min} 就在考场各种安享晚年,再想想 expr\text{expr} 要怎么写 100pts\text{100pts}。但是显然一直没有想到。

到了最后 15min\text{15min}Zcus\text{Z}\color{red}{\text{cus}} 突然开始狂码,看起来他要阿卡了。但是他没有写完,还是比较可惜的。下考之后 Zcus\text{Z}\color{red}{\text{cus}} 一句 “ 2m2^m 预处理 ” 点醒梦中人,发现我就是 sb\text{sb},为啥这不会。

还忘记了我的 bracket\text{bracket} 是正确的,以为他可以被卡。实际上完全卡不掉

之后去吃了 金拱门 麦当劳,下午+晚上机房团建,快乐。

Day 5.5

意识到我的 fib\text{fib} 20pts\text{20pts} 都没有,还以为 bracket\text{bracket} 可以被卡,十分难过,觉得自己没有 Ag\text{Ag} 了。

在洛谷讨论里看到有人问 160160 左右什么牌,有人说 Au\text{Au},但是我显然没相信。

Day 6

上午模拟赛,错过论文答辩还是蛮可惜的。

下午 4:00\text{4:00} 才闭幕式,于是一直在打摆。

然后打开直播闭幕式,突然发现 Au\text{Au} 线 158158??!?!那看起来就算挂了分还是有机会的。

十分紧张,看大家成绩一个个出来辽,有些担心第一题是不是会沦为暴力分。不过就算沦为暴力分也有 Ag\text{Ag},也能算差强人意。

最后出来了,170pts\text{170pts},踩到了,还有机房的 zxyhymzg\text{z}\color{red}{\text{xyhymzg}} 也拿到了 Au\text{Au}。没挂其他分了还是很开心的,毕竟人生第一块 Au\text{Au}

总结

本次 WC2021\text{WC2021} 十分幸运地拿到了 Au\text{Au},但是运气成分其实占比是很大的。要是我没有突然想到 expr\text{expr}70pts\text{70pts},我很可能就做不完 bracket\text{bracket}

还是不够强,导致只有遇到稍微擅长一些的题目才能多拿些分。实际水平完全比不上很多同省/外省的同届神仙。

再接再厉吧!