2017 ACM区域赛(西安) 参赛流水账
day 0:
周五, 鸽了概统课,早上和紫金港的几位小伙伴一起打车去萧山机场,从咸阳机场到西北工业大学坐了五十多个站的公交车,感觉身体被掏空。晚上在宾馆本来打算补之前训练的一个题,想想还是先花个十来分钟把数据结构课的作业做了吧,结果写出了奇怪的bug,debug两个多小时还是没有找出原因,心态爆炸(我还是退群吧),于是和一堆学长去楼下吃了夜宵(锅盔+羊肉串),快一点了才睡觉。 感觉宾馆有些垃圾,被单出现了不明血迹,热水壶里满是黄色的锈,马桶半天才能冲一次,水龙头里出来的水是黄色的,无力吐槽。
day 1(热身赛):
早上七点多起来吃早饭,然后做了下管理沟通课的小组任务,中午走路半小时去学校吃午饭,路过了“北大村”,“东大村”,感觉非常厉害。两点开始开幕式,感觉开幕式效率非常高,十多分钟就完事了,然后大家到比赛场地试机。一上来就发现我们的键盘没有Tab键,十分糟糕,让志愿者给我们换了个键盘,但是键位分布比较奇怪,严重影响手速,有些糟糕。由于西安没有python,只有java,我和Johann强行甩锅给reku学长,虽然经历了一些坎坷,reku还是成功写出了a + b的java程序。 发题后,我一看A是个娱乐题,已知n, 求 x ^ n 。 x是未知的,是题面中出现的某个日期,要我们猜。 我和reku说了题意,先上去敲了快速幂, reku觉得2017这个日期藏得最隐蔽, 热身赛刚开始,我就交了一发,结果发现Run ID 已经是18了,不过竟然一发就猜对了。 过了一会儿,志愿者小姐姐过来发了气球,我们竟然是一血,感觉是有生之年系列。。。 之后Johann上去写B题,是个大模拟题,我和reku看了下C题,发现和七月集训cjb组出的一个题几乎是一样的,非常开心,就开始在边上扯皮摸鱼。Johann过了B之后,我上去敲了个暴力找循环节,发现和cjb的那个题有些不一样,每个数需要走若干步才会进入循环,cjb组的那个题是每个数本身就在循环内,全队瞬间懵逼,开始大喊“gtm cjb”。 之后打表发现每个数只要走不超过6步就可以进入循环,觉得可以暴力前几步,然后再转化为cjb的那个题。 最后线段树维护出了锅,WA到死,看到榜上这个题已经被A穿了,觉得估计是暴力就可以过了,试了下还真过了。 最后半小时把时间留给了reku测环境。
回到宾馆把热身赛C题重写了一遍,找到了bug。然后开始做概统的网上小测验,室友告诉我每个人的题都是一样的,然后把答案发给了我,我点开后把第一题的答案选好,这时候reku说了声:“学长这么快就AK掉小测会不会被老师查水表啊”。我觉得很有道理,打算过一会儿再把答案抄上去,于是先去补了上周训练的题,折腾到九点多总算A掉了,突然发现小测忘做了,喜获1分。 睡前和reku在宾馆里看电视,在放非诚勿扰,男嘉宾1:我从耶鲁大学毕业。男嘉宾2:我刚从硅谷回来。 男嘉宾3:我是两家公司的CEO。 女嘉宾1:我已经保研了。 女嘉宾2:我也已经保研了。 不禁感叹我们这种单身狗连相亲都不够资格,还是洗洗睡了吧。
day 2(正式赛):
9点开始的比赛,7点10分就要坐车去学校,然后在体育馆冰冷的凳子上坐了一个小时。比赛开始后,Johann很快发现B是签到题,写了发贪心,交上去喜获1WA,我们三个人盯着看了五六分钟没看出哪里错了,后来才发现应该开的multiset而不是set,过掉B题后看榜排名都100+了,还有一个F题也有好几个队伍过掉了,于是reku和Johann去开F,我继续看别的题。过了一会儿,reku给出一个DP做法,johann发现有环不能搞,我丢掉手上的题也来一起想F,发现好像也不会做,于是陷入僵局。看到F渐渐被A穿,G也有几个队伍过了,心态有些爆炸,好在之前训练我们前期也总是爆炸,三个人都还算冷静。 我去看了下G,发现只要按位考虑搞一搞就好了,写好之后交上去WA了,开始怀疑人生。再看了一遍题目,发现题目第二页说答案需要mod 1e9 + 7, 加了个取模就过了。 这时reku和Johann猜了个F的结论,决定试一试,写了一发竟然AC了,我接着上去写了H的线段树贪心,1A,我们队一下子从1题变成了4题,变成了第6名,三个人的心态都渐渐好起来。 我又去想了下A,发现应该只要线段树维护线性基搞一搞就好了,复杂度也没仔细算, 把H题的线段树改了改就准备交,reku过来瞅了几眼,发现了一个小错误,改正后提交1A。 我写A的时候 reku和Johann讨论出了J题的做法, reku接着上机写,Johann在边上看着reku写,我去看剩下分别有一两个队伍过的E,I,K。 E我一看就感觉属于我们队能力范围之外的题,接着看了I和K,发现好像都不会做。 reku写好了J,发现样例非常巨大,敲了半天之后发现哪里多敲了一位,顿时心态爆炸,甚至打算不测样例直接交, 但被Johann按住了。 Johann上来继续敲样例,reku打印了代码先肉眼查错, 我继续在边上摸鱼。 敲完样例后发现过不了第二个样例, debug一通提交1A, 然而我对E,I,K还是没有任何思路。 我把K题霍尔定理引出的小结论和队友讲了,然后Johann提出了一个比较妙的转化,reku提出可以莫队 + 线段树,这样复杂度是O(nsqrt(n)logn),感觉不稳。但是三个人讨论了半天也没有讨论出更好的做法,于是决定我先写着试一试,写好之后交了一发果然T了。 然后我和Johann发现I题好像也可以用莫队搞一搞,reku掏出了莫队的板子,我说”莫队很简单的不需要板子”,结果我就把莫队写错了。 到最后一小时封榜我们还在debug I题,最后只剩半小时了 reku掏出莫队的板子,发现和我的有些不一样,然后才发现莫队写错了,改正后提交, 三个人盯着屏幕大喊“gtm cjb“, 终于过掉了I。 最后半小时reku决定乱搞K题, 加了一些奇怪的判断并调整了块的大小,终于把TLE变成了WA,可惜直到比赛结束也没找到错误。 最终7题 rank 17 打出GG, 不过第一次区域赛就拿到了Au还是挺开心的,reku学长也弥补了去年的遗憾。
教训: 感觉我们队应该是可以过8个题的,I题我的失误有点大,千万不能对自己的能力过于自信,既然有板子就把它用起来,否则万一写错浪费在debug上的时间要远远多于看几眼板子的时间。
之后的比赛也要继续努力!