2019ICPC徐州打铁心得

现在是夜间十点三十分,列车缓缓驶离徐州。此时,车内鼓噪的焦糊气味,或是窗外领受放逐的夜色,无一不暗示并试图揭开一个黑灰色的谜底——

俺们打铁了。

冇错,俺打铁了。2019ICPC徐州,我ACM划水生涯中的第一场区域赛,就这样打铁了。真的难受。反正火车上也睡不好,干脆就流水账式记录一下打铁心得吧(捂脸)

徐州站的比赛时间是在11/2-3,很不巧,在湖大校历上,这两个日期属于第八、九周,那些期中考试密布的时间;更不巧的是,11/1正好安排了操作系统的期中考。本铁表示真的南,平时各种作业、各种实验已经把本铁榨干了,平时就冇时间敲代码写题了,这下还得同时兼顾两边,本铁可做不到。本铁也确实没有做到(捂脸),所以本铁基本是随意糊过了操作系统复习,然后随意刷了几道网络流(WA了),就考完了试并搭乘上了1号的从长沙开往徐州的高铁。

高铁上,前排三连座(合肥转向后变成了后排233)是湘潭大学的一支队伍。说实话,觉得湘大有点强,上次CCSP湘大拿了两块金牌两题一血而我湖金牌数爆零的惨状我还历历在目,肃然起敬。同一列车还有几支同是去徐州站的其他学校队伍,没有一一招呼。

接下来就是漫长的乘车了,一直到晚上八点多才抵达酒店。原本的想法是1号晚到酒店再刷几道题(因为三个人都忙于应付繁重的课程,真的蛮久没敲代码了…这也是打铁的原因之一),但是一天的旅途的劳累把代码置换为了瘫倒和炸鸡,然后开始幻想打到不同颜色的牌子(黑色除外)。就这样,打铁故事的序章就这样结束了。

第二天,本铁睡到了十点半才起来(虽然九点就醒了),然后坐公交到了矿大南湖校区准备签到。到了体育馆签到,发生了令人难忘的卑微事件:矿大并没有为我们队准备比赛物资。看着同一时间到达的zju队伍,干净利落地领取到物资,心里不由地恰起了柠檬。但是没有物资是不行的,比赛服、胸牌、餐券等等。志愿者们在询问了我们三人的上衣尺码后,为我们临时配齐了一套物资。但是!但是!俺们这胸牌咋跟别人的不一样呢?!人家的胸牌上印刷着姓名与学校,俺们的胸牌咋是一块大白板???嗯???志愿者叫我们自行写上姓名学校,我们便开始幻想写上诸如jls、dls之类的祈愿图腾,但最终决定保持它的白板模样,做三个无名铁憨憨。

饭点,餐券指引我们到松苑餐厅三楼恰饭。菜品总共好像是有三荤两素,可以任选两荤一素,最好吃的居然是大白菜。恰完饭,逛逛矿大校园,然后按照惯例,必感慨其他学校面积之宽广、建筑之高大、湖水之必要、草地之奢华…兜兜转转之后,回到体育馆,休息了一会便开始进场,准备进行开幕式与热身赛了。进场后,我们迅速找到属于我们的机位,发现右方是高铁上遇到的湘大的队伍,而右后方则是敌我实力悬殊的thu,瑟瑟发抖。

随着无聊的开幕式结束,热身赛正式开始。评测系统是PC2,是第一次见到吧,并不熟悉,所以刚开始研究了一阵子才开始交题。B题是水题,所以1A了。A题画图观察了一下,很快就发现了大权值应该放在长链上,写了一个长链剖分,又1A了。C题题意还没看懂,就听见旁边的thu好像做出来了,真实卑微…尽管C题后来我们看懂了,还是不知道要怎么做1551。最后热身赛结束我们在银区,感觉还行(菜鸡自我感觉良好),就高兴地回酒店了。

第三天,也就是正式比赛的日子。早上乘坐七点半的酒店大巴去往矿大,坐在本铁旁边的不知名学校的在打邦邦(打得比本铁菜)。真的佩服在大巴车上这么抖还打音游,由于没有社交欲望,所以并冇交流。抵达矿大后,一直到八点半才开放入场,我们找到我们的位置,掏出装饰性道具“算法模板”以及“英汉词典”,作为桌面除气球外最精美的摆件。

九点钟,比赛正式开始。本铁用量子波动速读通读了题目,发现题面都不长,心生所有题都是签到题的鬼才想法。本铁选择先看J题,因为它看起来是个图论题。J感觉用欧拉路跑一下什么什么的,但是由于没有特别清晰的思路以及试图跟榜的菜鸡心理,没有深入思考。

十多分钟后,C题有人过了,我们立即跟榜!C的题面非常不一般!“明明是素数非要说成是<3 number!你搞不了我的”于是,我们就被搞了。素数密度好像是有式子的,但是我忘了,但是通过简单推理,是可以发现区间长度超过一定数值,素数的个数必定小于区间长度的三分之一,也就是输出Yes,而对于小区间,则采取暴力判断的方式,复杂度是够的。俺们的主码jh光速敲完,然后光速提交,然后光速WA了!多么完美的算法,居然WA了!这是无法被接受的,于是我们开始debug。首先怀疑的是暴力求解的区间范围是不是太小了,因为只取了1e2,但是用sqrt(n)复杂度的判断素数算法太慢了,范围不能再扩大。为了解决素数判断太慢的问题,jh果断选择了敲一个米勒拉宾!成功将暴力判断的范围扩大到1e4!提交,又WA了!怎么可能???这里好像只写了几句话,实际上赛场上时间已经过去一个小时,全场已经一百多支队伍完成了C题的签到,到处都是红色气球,而我们还是0题+4罚时!开始慌了,究竟为什么,感觉所有人都会的题,为什么我们还没签出来。接下来就是一直试图扩大范围以及对拍验证猜想的正确性,发现都非常完美,但是就是过不了!(此处:本地过了就是过了,评测机返回错误就是评测机的问题.jpg)然后,本铁开始沉思,比如1是不是素数(对不起一直在想素数想着想着忘了),看了眼队友写的代码“if(x==1) return 0;”,哦,1不是素数啊。然后本铁开始检查下面的代码,没有发现问题。

时间过去了一个半个小时,我们居然还是0题,而场上大部分队友都已经签了两题了!我们只好在C没有过的情况下试图开新题。本铁在此前还看了一道F,发现可以打表过,但是由于不想抢键盘加上想把C先过了,就没有提直到现在。所以我们写了一个打表程序,让它后台运行,然后接着想C。终于,队友wk顿悟了一切的奥秘,那最原始的也是最残忍的——“1不是素数但是是一个<3 number”。。。原来是我们把<3 number直接等价成素数了,所以判断1的时候直接返回0了,就一直WA了…把判断1的返回值改成1后秒过,真的哭了,此时时间已过了两个小时,我们终于签到了。。。

然后,开始接着看F。“F打表怎么这么慢??”1e10的表理论上不用多久就能打完了,但是我们的输出文件的内容居然纹丝不动!心生疑惑的我们试图在终端上输入文字判断程序是否运行完成,结果发现程序居然还没开始跑!原来是运行错了代码!我们以为它跑了半个小时,结果一秒钟都没跑!尽管这个事实非常令人震惊,但好歹刚刚终于签到了稳住了心态,所以迅速为代码加了些优化,重新跑了一遍。大概跑了二十分钟,成功把表打好,交上去A了。至此,时间已过两个半小时,我们终于完成了大家一小时时就完成的两题签到。

接下来就是看A题。A题我们都没有思路,就是一顿瞎打。本铁搬砖模拟了一下相邻数异或,发现了一些后来发现有用规律,但是本铁太菜了,不懂怎么用,就想着新开一题M,还一直想不太明白题意…A题队友在做,但是提交了几次都是WA,以至于后来心态爆炸,提交越来越随意了,毕竟这时候很多队伍已经三题了,而我们才两题,我们想的已经是开始拼题数了,这个理应避免。

我们与A胶着,一直到封榜。此时,我们还是2题,200+名,毫无疑问的铁区。封榜后,对A大概进行了6次尝试,始终是WA,直到第7次,意外地返回一个YES,而这时,时间已过去287分钟,也就是说,只剩下13分钟了。。。。。。。最后的13分钟想敲M题,但感觉时间来不及,在最后几分钟时放弃了。

最后比赛结束,我们开始疯狂计算能否不打铁,最后的结果令人悲伤:我们有百分之九十的概率打铁(瞎算)。最后结果的确如此,我们罚时爆炸,然后就这样打铁了。

由于是第一次参加区域赛,是有很多问题的:心态,细心程度,等等。我们觉得主要是因为C题签到题一直过不了导致心态不可避免地变差,影响了后来题目的节奏,同时又浪费了太多时间在上面,导致其他题目时间不够。当然,还有一个致命问题,就是太菜了。

打铁是必然经历的过程(开始自我安慰),那么这就是我第一次打铁的真实经历了…

猜你喜欢

转载自blog.csdn.net/HNUCSEE_LJK/article/details/102904376