「こんなきれいな星も、やっぱりここまで来てから、見れたのだと思うから。だから・・もっと遠くへ・・」

WF2017 滚粗记

已经不知道多久没有更新博客了,而且现在大概也没有什么人知道我了吧,更不用说博客了……
还是作为写给自己看的文字记录一下吧,毕竟是OI/ACM生涯最后一次正式比赛了,以后其他的算法竞赛大概也太弱没什么实力参加了吧……
Rapid city风景超漂亮,感觉比boston好多了。下飞机时候看见机场旁边有一大片草地,一群牛在悠哉悠哉的吃草或者趴着休息,美如画有没有。然后想到自己一堆还没考的期末考试不由得更加羡慕起这群牛来了>_<
第二天是去著名的刻着四个总统的头的山玩,可惜我要复习万恶的期末考试,于是没有去,但是开幕式时候看纪录片雕刻的过程还是觉得好壮丽…… 说是为了振兴旅游业但是似乎并没有太多效果。中国要是把长者之类的刻在山上大概绝对能游客络绎不绝吧(误
晚上和thu和pku的人一起去某饭馆吃饭,膜拜了cls dls 策爷等一众大神

然后写一下考试怎么血崩的吧。
开场七爷打模板,叉老爷和我分别从开头和最后开始看题。我看了几题感觉都不太可做,然后听到观众席掌声传来,发现全场一血是E,叉老爷立刻看了一下开始写,写完没有过样例于是打印。然后我发现I是一个傻逼题,立刻去写掉了,写完I的同时叉老爷也找到了E的bug,两题都1Y。然后七爷在28分钟独自过了F,开场好顺利。
然后我看了C,发现是一个裸的带权匹配。因为我平时费用流都用zkw,这题有负权的情况zkw会比较麻烦,于是我写了建图然后七爷敲费用流的版。我准备C的时候手算了样例1是对的,结果写完后WA样例2,脸一黑,打印调试。七爷和叉爷讨论了A和D的做法,然后七爷开始写A的几何。
我看了一下C的样例2,怎么都理解不了答案,于是重新读了一下题,发现了一个理解错误,幸好是可以fix的,于是想了一会去fix了一下,过样例,提交WA。叉老爷校对了一下费用流版,确认正确,怀疑算法错误。我想了半天想不出算法哪里错了,又看了一遍代码发现费用流里有个返回值没用long long,于是改了一下再交,依然WA。我想这下算法大概真的错了,虽然完全没有头绪为什么会错。叉老爷也帮忙看,发现了代码的一个问题但后来又证明了不影响正确性,于是还是想不到哪里会错。我暂时放弃了C去看其他题,但还是不死心又回来想C,最后在快2h的时候突然发现卧槽怎么感觉费用流加边的函数有问题啊?反向边异或1的话第一条边应该是偶数编号啊?顿时惊呆……
于是结论是带的费用流的模板有bug -_-|| 这是什么狗血事情…… 七爷表示以前明明用过这个版,我也有印象以前用过,完全不明真相…… 于是在118分钟终于+2过了C
期间七爷写完了A,打印读了代码找到了几个bug,本地造了几个数据也没问题,但提交WA。后来又找到一个bug,提交还是WA。叉老爷想了一个D的做法,但是写了才发现不对。我看了HJKL,H感觉是贪心但没人过肯定是错的,J不会,K感觉和中国regional某题很像但这种题显然不应该我做,L想了一下感觉可以做。
于是我上L,写完后提交WA,打印找到两个小问题,fix后依然WA。想了半天才意识到自己傻逼了漏了个情况,这题得用扫描线扫一遍才行,而且之前代码基本白写了。
然后叉老爷想出了D的正确做法,对拍确认正确性,在209分钟1Y了D,期间七爷暂时放弃了A开始想G的做法,我准备L的代码。
然后我重写了L,WA了一次后在封版后几分钟过掉了L。
之后七爷继续写G,叉老爷和我看七爷的A的代码。我读了七爷的A的代码,又听了叉老爷解释,怎么觉得为什么tmd这么复杂啊…… 为什么要那么早写这种题啊…… 看了一遍完全不知道错误应该从何找起。七爷写G我也帮不上什么忙(大概知道G的做法但不知道怎么优化复杂度)。于是我重头想A,想了一下感觉可以二分长度然后就变成只要判点在多边形内部了啊,又想了一下发现连二分长度都不要啊?感觉直接枚举直线,求出和多边形的所有非正规和正规交点排序,然后取每段的中点判一下内部就好了啊……? 于是问七爷什么情况,得知我的做法要用实数担心有精度问题决定直接求精确解……
我准备了一下A,虽然我不知道多少年没碰几何了但看了一下要用的东西版里都有也都很短,感觉最多20分钟就能写完。但是看七爷在调G的代码觉得最后时刻重写A太不理智了(而且精度问题也确实可能会有问题),于是放弃了。最后G也没有过。

这次比赛的问题的话:

  1. 模板有问题,导致浪费了我和叉爷的大量时间(至少1h),影响了心态,而且导致了一系列连锁反应,比如在我调C的时候七爷和叉爷没有题可以写,然后去上A这个几何大坑了。
  2. 我写L的时候没有和叉老爷讨论做法,这是非常严重的错误,因为这种很传统的题叉爷应该能立刻指出我最初做法的错误的,就不会浪费大量时间写和调试一个错误的算法了。
  3. A这道题虽然我大概没资格说,但我确实觉得这场比赛做A的策略是有问题的。七爷自己想了做法然后直接问叉爷其中某一步怎么判,叉老爷想出来后就直接开始写了,于是我和叉爷都没有意识到七爷的做法细节的数量(当时因为C拖着导致没有其他题可写也是一个原因),而七爷自己大概低估了细节的数量,导致A一直WA而且找不到错。如果叉爷当时自己想一下做法,或者我想一下(虽然这点过于事后诸葛亮了,因为训练里我就从来没有参与过几何题),大概会好很多。
  4. 叉老爷最初推错D的结论导致代码重写,不过这个大概确实是比较运气不好。maxdot和mindot做法是不一样的这种事情大概如果之前没有经验很难直接发现吧……

分锅的话,感觉还是我的锅最大。明面上的锅的话,如果C题还能说是模板有bug确实活见鬼难以预料,L题的锅是无论如何都甩不掉的,明明自己疏于训练,还不和队友讨论清楚就直接上了,真是脑子有翔。如果是大一的我,L应该能立刻想出正确的算法过掉吧…… 但更大的是暗面的锅,疏于训练导致几何题碰不了,数据结构题写不了,甚至连个费用流版都让队友去敲,训练赛里就只能xjb搞搞乱搞题推推结论,最后一小时最后一道题给我就崩,简直就是躺着赢。看到A,几何我不管,看到D,这么传统的题叉老爷肯定比我做的快…… 如果训练的多一点,不至于直接把A和D甩给队友的话,感觉情况会好很多。

说实话,比赛前完全没想到会这么惨,这场打的比训练赛(包括训练往年final的题)中任何一场都要惨,真的惨绝人寰…… 不过自己本来赢也是抱着队友大腿躺着赢的,也只能算应得吧……