首页 > 代码库 > World Finals 2017爆OJ记

World Finals 2017爆OJ记

Day-Inf:

技术分享去年China-Final一道数据结构题的FB送我进WF。

今年课表意外地满,好几天都是早上8点一直上课上到晚上9点,作业也相对较多。敝队大约每个星期只能训练一个下午,有时候甚至一整个星期都没有机会训练。

除去ICPC Camp,今年大概只组队训练了7场,浙江省赛还因为内存原因少过一道动态凸包。直到WF前,我也就是单人刷完了WF2014、WF2015以及绝大部分WF2016,训练时间实在是不够。队友也已经大四,整个学期都很忙,水平肯定有所下降,在WF前一周稍微写了写题找找状态。

 


 

 

Day-1:

一下飞机就发现忘记开通全球漫游服务,这意味着这一周都要在“无服务”中度过了。

在San Francisco旅游了一天,傍晚6点回到宾馆,因为时差问题非常疲惫,直接睡到第二天。

 


 

 

Day0:

经过多次转机抵达Rapid City,发现美国插座与中国的差异,意味着接下来一周给电脑充不了电。同时发现这个地方非常寒冷,一边穿羽绒服一边吃感冒药。

酒店内部非常漂亮:

技术分享

 


 

 

Day1:

旅游日,早上去了著名的Mount Rushmore National Memorial参观。

技术分享

因为时差没倒过来,中午回到酒店就直接睡下了,一醒来晚上8点钟,神奇的是在这里晚上8点钟太阳依然高照。

睡醒之后掏出电脑切了WF2013的7道简单题,结果写个网络流还被卡了ISAP,感觉过几天比赛药丸。

 


 

 

Day2:

开幕式日,在会场娱乐区和qls、tls一起玩游戏,感受到了qls卖队友能力有多强。

不得不说外国的天真是蓝:

技术分享

 


 

 

Day3:

这天是热身赛,进场时被要求穿队服,于是回酒店折腾了半个小时。明天一定要准备充分才进场,不然肯定来不及。

热身赛都是以前WF的原题,一副默写大赛的样子。队友测试完环境,测试完Java、Python之后,还有10分钟的时间,问我要不要接着写。于是我开始rushWF2015的那道BFS题,写完编译都不测,交上去已是最后一分钟,结果居然AC了。热身赛就这样AC了10题,Rank7,感觉正式赛的RP全掉光了。

 


 

 

Day4:

最重要的一天来了。赛前老刘对我们说,来WF主要为了抢FB,而且只看题数不看罚时,于是我们就制定了先抢FB以及瞎提交的战略。

比赛开始后,我读了H题,想了大约5分钟,并不会做。队友则读了D题,并将题意告诉我,我感觉是个凸包题,但是仔细一想却发现好像并没有这么简单,一时半会儿也不会做。就在这时,场内传来了一阵掌声,我意识到全场FB已经出现了,于是让鸟神去跟。鸟神写完E题,提交上去返回WA。他认为是二分次数过少,于是改成了1000次,仍旧WA。他只好将代码打印,换南神去跟I题的榜。

因为队友WA了签到题,加上抢FB的欲望愈演愈烈,我根本不能静下心来思考,D和H都毫无思路,甚至读新题都有点读不进去。E题代码送来之后,我帮鸟神看了代码,发现他的二分上界居然只有区区1e6,仔细一算的确不够,应该是1e6+1000。为了保险,他改成了1e9,终于在27min时3Y了敝队这场比赛的第一题。南神I题也写完了,提交上去得到了AC,给我们带来了信心。

南神接着跟F题的榜,而我则在D和H之间斟酌。D题$n\leq 500000$,而H题$n\leq 10000$,从常识上来看应该D更加可做。我分析出D题两个序列都可以贪心处理成单调下降的序列,之后怎么优化并没有头绪。这种题说不定会有决策单调性?如果过了那是血赚(当时这题还没有人拿到FB),要是不过也不亏。于是我就尝试着写了一发利用决策单调性的分治,一遍过样例,正准备交时,发现已经有人AC了。交上去之后,跑了相当久的时间,但是还是WA了。这也没什么,毕竟我只是瞎猜了一个结论。

因为瞎提交战略,我开始各种乱搞,比如小范围暴力,大范围分治之类的,又连着交了两次,还是WA。因为没有其他题可写,于是我开始造数据验证决策单调性。打表发现随机数据下,它的确具有决策单调性,写了暴力对拍几十组数据也没有发现问题。这时我就慌了,毕竟这种对拍拍不出的情况从来没有遇到过。这时南神读完了K题,想上机打表找找规律,于是我把D题代码打印,将机位让给了他。

这时榜上还有A和C题被人AC过,A题是个几何,于是我们决定先开C。C一副网络流的既视感,和网络流队友一起讨论了大约十分钟之后终于得到了比较靠谱的做法,于是换他上去写了。131min时,C题1Y,我们的信心回来了一些。

接下来我们讨论了A题,感觉枚举两个顶点然后贪心延伸并没有反例,似乎比较可写,于是准备写,但是D题一直WA着也不是个事,我就决定先把D处理掉。因为这时感觉FB已经没法抢了,所以冷静了下来。经过证明,我发现D题的确是具有决策单调性的,但是不知道为什么WA了。于是我对着代码瞎改,比如把不合法的决策的贡献从0改成负数,然后爆了几发OJ,依旧是WA。这时南神将K题题意告诉我,是说将$s\leq 100000$个长度不超过$10$的串按在长度为$n\leq 1000000$的随机串中出现的概率排序。我说这个$n$那么大一定是没用的,大概和$1000$取个$\min$然后暴力DP就好了。他觉得很有道理,就上去写了,却返回了WA,他认为是他写错了,于是打印代码下来查错。

这时我突然意识到,如果分治先处理的是不存在合法决策的点,那么无论它选哪个点作为最优决策,都会破坏左右子区间的决策,这种点应该在一开始就被剔除。听说WF的评测机一秒能跑2e9,所以在修改之前,我尝试着交了一发暴力,不料TLE了。于是我重新修改预处理部分的代码,剔除了非法点,提交上去终于得到了AC。D题在第182分钟8Y。

技术分享

这时看看榜,发现A题过了一片,D过的比我预想的少,而且5题甚至位于奖牌区,感觉写掉A之后再开一两题并不是难事。于是我信心大增,掏出几何板子愉快地抄起了A题。在237分钟时,终于调过了A题的样例,结果返回了WA。这也正常,几何题一般都有坑。我随即手出了一组数据,发现果然错了,枚举的线段本身就不在多边形内的情况会出错,改完之后仍然WA,也再没有构出过能让自己错的数据。

南神和鸟神重新读了一遍K题,发现数据范围读反了,瞬间不会做。此时榜上还有L题过的比较多,于是他们去搞L了,我接着调A。我对A题做了一些assert,发现诡异地响应了,简直是不可能事件。在瞎改的过程中,我甚至发现将多边形翻转可以多过一些测试点,这就更加不可思议了。最后我索性重写了A,写了个$O(n^4)$的暴力,发现也WA了。

已经是最后20分钟,他们想出了L的一个扫描线+贪心做法,但是不会证,写也来不及了。于是南神决定找K题的规律,把自己猜到的所有结论都试着提交一遍,没有一个得到AC。我和鸟神则对着A题代码检查,并没有找出任何错,一直僵持到最后10分钟。

这时鸟神突然跳出来说:“你把eps从1e-6到1e-15都枚举一遍交交看。”我照做了,但是都WA了,每个eps坚持的时间都不太一样,非常随机。南神说他又发现了K题的一个新规律,让我们把机位给他。而鸟神又说:“不如改成1e-3试试看?这发交了就不管了。”于是改成1e-3交了上去,并换南神上K。我们内心都知道,这只是垂死挣扎,也没想着让它过了。绝望与遗憾地度过了两三分钟,我突然发现刚才那发提交似乎还在Running,它坚持得比以往都要久。我让南神按住刷新,结果居然刷出来一个绿色的√ Accepted。A题294分钟34Y,这就叫“无心插柳”么?我们惊喜地欢呼起来,连观众席上的校领导都知道我们过题了。K题就没有那么好运了,直到比赛结束依然是WA。

技术分享

技术分享

出了赛场问了一圈,得知了qls、tls都没有过A的噩耗,很多队伍都坑在了A上。然后又听说了L题我们那个做法可以AC的噩耗,并没有时间去写了。

滚榜的时候亲眼目睹了许多强队的翻车,听到主持人一句句“They are finished.”时,不免有些忧伤。

技术分享

我们最后6题,并列第20,虽然因为A题罚时原因垫底了。可以说战略制定地比较失败。

技术分享

 


 

 

技术分享

World Finals 2017 is finished.

HDU-SupportOrNot has finished.

 

World Finals 2017爆OJ记