2021WC比赛总结反思
Time:2021.2.6 8:30~13:30
\(Day\) \(0\)
颓废,全机房都在划 PVZ β版,场面真壮观。
老师:lzy 你都高中了怎么还在玩小学生玩的游戏啊?
lzy:(笑笑不说话)这小学生能玩?小学生玩早就玩自闭了。
\(Day\) \(1\)
比赛前听说去年 \(100\) 分就可以拿到银牌,于是想着能攻下一题就好了,实在不行再去把会的暴力打满。
8:30,准时打开题面。看了一会儿题面,明白了第一题的题意,于是开始在草稿纸上推性质想做法。
一会儿后,发现一个重要性质:路径具有传递性。于是想到一个不错的做法,当时以为是正解,就开始写代码。
终于码完了,一测,样例二 WA 了,然后开始分析,于是知道自己哪里错了,并造了一组规模较小的HACK数据,证实了我的猜想:第一题伪了。
此时已过去了大概一个半小时,总共五小时,也就是每道题平均能做一个小时四十分钟,我就去看第二题了。
一看这题面:???看这样例:???好直接弃了罢了。然后就直奔第三题了。
不得不说,第三题题面又短又好理解,但我没想到可以把广义斐波那契转化成斐波那契的形式,也不知道斐波那契循环节不超过模数的 \(6\) 倍的性质,只是觉得跟以前 CF 上一道吉老师出的斐波那契题很像,就直接开始推式子。
式子推出来了,然后发现这两题的差别是,CF 上那题模数是确定的,但这题模数是不定的,于是就可能没法找到一个整数使它在模给定模数时同余 \(\sqrt5\),然后就做不下去了……
此时大概过了两个多小时吧,而得分情况是 \(0\) 分,有点小慌。于是做出一个果断的决定:先把暴力打满,再去优化或想正解。
然后迅速地把第三题 \(O(n^2)\) 做法 \(20\) 分暴力打完,又算了算,第二题没有问号的暴力大概有 \(50\) 分,第一题认为能打到 \(64\) 分。但想了想感觉第二题更稳一点,遂决定先打第二题。
第二题普遍做法好像都是先建一棵表达式树,但我一下忘了这玩意(尽管打 CSP-J2020 时还亲手写过),于是打了个递归函数,发现也能做(但是这种做法真的处理不了问号,血亏),然后就边码边调,最后样例三过了,自己手测几组也没什么问题。
于是就想着把问号枚举一下是大于号还是小于号,这么做时间复杂度极高,为 \(O(|E|\times m\times 2^x)\),\(x\) 是问号个数,但我想说不定能多骗一点分呢。不过很快也打完了。
最后做第一题,那时时间还挺充裕的,于是吃了几个面包,喝了一瓶牛奶。机房其他人叫 Linshey 帮忙去食堂带了午餐回来,真香(血亏。
想了想去打 \(64\) 分,打着打着发现假了……然后放低复杂度要求,去打 \(32\) 分,可打完发现又假了,我庆幸一开始没有死命磕第一题,但也有点小慌。
分析了一波过不去的样例,发现它重复经过了一些边。好家伙!想了一会儿还是没想出做法,最后打了一个时间复杂度只能通过 \(32\) 分,但正确性没有保证的乱搞算法……emmmmmm,还是太菜……
最后检查了一会儿文件名等其他东西,没什么问题,交上去的代码也都跟最终代码一样,感觉这次有点悬。
当时估分 \([0,32]+[35,50]+20=[55,102]\),又听学长说“今年不比去年难”,那就是比去年简单了……于是感觉自己最坏情况没牌,最好情况也就铜牌吧。
\(Day\) \(2\)
成绩出来了,获奖的人被公开处刑,但我觉得这样其实挺好的。心情十分忐忑,因为铜牌线今年是 \(70\),平均分 \(96\),感觉很不安。
随着获奖选手的分数一直上升,我的心路图是先上升后下降,直到获奖选手的分数超过 \(102\) 了还没看到自己名字,我知道,我打铁了。
Linshey 巨佬 \(114\) 分 \(Cu\) 了,chen03 巨佬 \(122\) 分 \(Ag\) 了,果然还是自己技不如人。
后来 CCF 把所有人成绩都下发了,自己最终得分:\(28+0+20=48\)。嗯?我第二题全挂了?第一题乱搞还拿到挺多暴力分的!有点难受。
再后来校内 OJ 和洛谷上题目出来了,漫不经心地又交了一遍,也知道改变不了什么,结果?屏幕上出现的分数为 \(28+50+20=98\)?!
感觉有点奇怪,但两个网站上的数据都是官方数据,又觉得有点不对劲。然而 CCF 并没有说可以申诉,于是很尴尬,有分拿不到。
最后想了想,还是发了一封邮件给何琳老师,并且和自己教练也说明了这个情况,教练叫我去问学长。
于是去问了粉兔,宏队和 Early,然而他们观点都很一致,认为我某个地方 CE 了,尽管我在本机和学校的机子上都运行得好好的。
最后知道原因,是 C++ 的版本不同:正常 C++ 是 5.11 的,校内 OJ 是 8.2.0 的,洛谷上应该也很高,而 CCF 那边的 NOI LINUX 的 C++ 版本却是 4.8.4 的!于是我这种写法在它那边就 CE 了……痛失铜奖啊……
这次比赛给我带来的教训是:
- 想到做法后不妨验证下正确性再写,不然写出来发现假了就等于白写了;
- 另外,尽量不要用自己不太熟悉的写法,尽管本地运行没问题,但在LINUX系统下,可能会有意外的结果,所以比赛时写代码还是宁愿写麻烦一点,但不要因节省这一点点时间而整道题爆零;
- 最后,这次策略安排其实还是存在一些问题,尽管这次问题并没有暴露出来,下次应该先把题目都看一遍,再去想做法,不然有些题暴力分充裕却因没看题而没拿到。
- 不过这次比赛也有一些值得学习的地方,比如一题卡住了一会儿但没有一直卡住,而是选择跳过去看其他题,不像 CSP 儒略日整整卡了两个小时,不仅只拿了 \(60\) 分,还导致三四两题草草看过后时间只允许自己拿一点最朴素的暴力的分;
- 另外,这次暴力也都打满了,并且如果第二题在 CCF 那边没有 CE 的话,总分和估分还是差不多的,也就是几乎没有丢分;
- 但是,就算这次拿到 \(98\) 分,还是没有 Linshey 和 chen03 的实际得分高,这也说明了自己的水平还差别人挺多,以后要继续学习没学过的算法,要在洛谷和 CF 上多做题。
No stress just gotta make myself