2016年ACM/ICPC大连站(第一块铁牌)

来源:互联网 发布:生酮饮食都吃什么 知乎 编辑:程序博客网 时间:2024/05/17 05:03

//睿   照片左边第二个 计算机科学与工程类15

//洁哥  照片右边第二个 计算机科学与工程类14

//RE       runtime error  运行时错误,一般是由于数组越界或除0引起

//WA      WrongAnswer  错误答案

//1Y        一次提交通过

//DFS    广度优先搜索算法

//打铁:没有获得奖牌

 

16号早上,从宾馆到体育馆的路比较远,走得比较慢。路上话不多,走到一半下起了雨,没带伞。

比赛开始前发现交题系统有每道题的题目,我在准备头文件,让睿先查了下,印象最深的是IConvex(凸面镜)。

开始后,睿从头看,我中间,洁哥断后。我浏览了下题面,先看到了D比较简洁,D的题目就是A Simple Math Problem:已知两个数的和与最小公倍数,问是否存在这样两个数,若存在则打印出来,但是有2W test cases。想了1分钟,没什么好想法,又去看C Game of Taking Stones:标准的威佐夫博弈,但是两堆石子的数量达到10^100。我当时以为大数加威佐夫博弈推出的黄金分割比就能解,就和洁哥说了下,然而还需要用到高精度,夺冠的Q苣(北师大队)最后一题做的C。睿当时想和我讲A,同时洁哥说J简单,刷榜发现IJ有人过了,决定跟榜搞J,我去看II看不懂,看榜,再看H。调试J花了点时间,差不多10分钟1Y

我手推了H,发现应该很简单很简单,但是那时候过的人还不多,决定再想想有没有坑。洁哥让我讲I,我说没看懂,不能讲,然后上H34行代码吧,又看了下榜,发现过的人比较多了,但是居然有人错,最后还是果断交了,1Y

I题卡了1小时,应该是求多边形面积,分割成一堆三角形就行,被Convex忽悠了,一直往凸面镜(圆)上面想,感谢睿根据数据过了题,1Y

 

想了10分钟I,我说不能卡在一道题上,看到有人过D,我和洁哥跟榜走了。睿之前看过D

由于两数之和(a,范围为2*10^4)比两数最小公倍数(b,范围为10^9)要小的多,和我说的想法是分割a,我想用set容器记录所有对A的查询过程实现优化,可是数据还是太大,显然不行,而洁哥的想法是对b分解质因数……

 

60分钟过D的人变的多了,A也有人过了,对面的是浙江工业大学,他们过了D,排名40多,右边的香港中文大学更快,香港大学对面则是重庆大学,前几的10题金牌队。HIJ100基本都过了。怎么办,有点慌,只能闷头看题,不去看他们的气球。我当时想,要想拿铜,至少6题,不如先看A Wrestling Match:好人和坏人打比赛,给出人数1000以内,比赛数10000以内,以及两列已知的好人和坏人。题目保证一个人不可能同时是好人和坏人,问能不能将所有人都分成好人和坏人。我第一感觉就是题目有问题,A确实也是一道有疑问的题,全场1/3的提问都是关于A的,但问题无一例外No Response,而且最后做出A题的队伍超过半数。我最后只能理解成保证已知的好人和坏人不会重复,给睿讲了我的理解,觉得并查集可搞。洁哥在想D,电脑空着我就开始敲,有点类似“食物链”的简单并查集,发现板子里面没有,只能凭记忆和想法打。敲到一半又把电脑让给洁哥,打印之后手写代码,洁哥敲到一半发现想法有漏洞,打印接着想,我很快敲完了,调试了5分钟,测了3组数据都没问题,就交了。没有苦等返回的结果,我就开始检查代码。过了一会才返回结果,不是期待的1Y,居然也不是WA,而是RE,怎么可能,不可能啊……只好打印代码,把电脑让给洁哥。感谢这中间睿想出了I,我们才感觉似乎还有那么一点希望。

 

由于鼠标有问题,右键不能使用导致我们只能在一个工程下进行编码,很不方便也很痛苦的经历,直到比赛结束前我们还天真的以为可能是BC版本太低不支持右键……痛苦的A,检查到了错误,但是修正的错误并不会导致RE,睿说建议我带数据进去走查,这相当浪费时间,但只能这样了,可小数据走查的结果还是没问题。又交一发,又是RE,怎么可能,不可能啊……这时候距离比赛结束只有不到三小时了,洁哥痛苦的发现对D题对b分解质因数问题太多,对面的浙工大还是4题,右边的香港大学刚过了A,我听到了他们说DFSDFSDFSDFS!我想了下,利用前面的关系建图,如果有人没出现过就直接“NO”,否则利用后面的两列已知的好人与坏人先爆搜关系,无矛盾从1n再依次搜关系看是否有矛盾,好像也能实现,但是DFS时间上显然没有并查集优越,可是并查集的代码又查不出错……我想DFS重打A,这时候睿说F:数据组数10^6以内,给一个10^9以内的数,分成若干个数的和,求乘积最大值  推出了关系,但是数据很大,他给我讲推导的过程,我当时真的有点着急了,听不进去,我觉得讲想法有点浪费时间,就问他能不能推出公式。哎,我真该先看下题目的。过了10分钟,他推出了更简单的式子,看着式子,我在想矩阵快速幂能不能搞。这时候洁哥放下了D开始看A,睿开始上F,我给他找了快速乘法和快速幂的板子。我这时候应该是不大可能想到要先看下F题的题意吧。F题简单递推会超时,睿又简化了式子,变得可以用矩阵快速幂,试了很多组数据都没问题,然后一起期待满满的迎来了——WA。睿说不可能错的,把int改成了longlong又交了一发,好像也改了个小错误,可还是——WA。只剩一个半小时了,快绝望了,但不可能放弃!只能打印F,洁哥说A好像是二分图,重打A,我还是在看A并查集的代码,中间又看了下D,没结果,没想法。还剩一小时,洁哥的A也得到了WA。然后睿发现了F的错误,又交了一发……WA!还是无情的WA!还剩半小时,睿发现看错了F的题意……

F:数据组数10^6以内,给一个10^9以内的数,分成若干个不同的数的和,求乘积最大值。

最后二十几分钟真的很难熬,重打A加上调试怕是来不及了,看代码又找不出错,怎么办?!

唉!!!

 

打铁的心情感觉自己就像块铁。心里很难受,可又不是很痛苦,因为自己什么水平,队伍什么水平,其他学校什么水平本来就是很清楚的事,只是现在有了更清楚、更直接与更残酷的认识。

 

41日接触ACM到现在,6个月了。白驹过隙,忽然而已。听说1000题是铜的门槛,还有一半啊!只希望增强实力,来日再战。不负努力,不负青春!

 

原创粉丝点击