这是我第一次正式现场组队赛,直接进入正题。
周六的热身赛,第一道题是一道最大子段和,孔很快就A掉了那道题目。第二道是素数筛选的变异,我们的思路都已经到了题解的那个点上,可是当时我越想越复杂,导致我们写的代码越来越长,最后没有过那道题。总体上,我们热身赛表现的不是很好,不过那个晚上我们重新开会商量了第二天比赛的注意事项和对情绪的调整,那时候也定下了我们的目标和具体的分工,所以第二天的正式赛我们的情绪调整得很好。
第二天到达图书馆,正式赛很快开始了。所幸我们3人都十分淡定,这次的心态调整得比较好,很快进入比赛的状态中去。
拿到比赛题目,开始读题。很快就看出第十一道题是一道很普通的打印,马上符开始敲这道题,他很快A掉了这道题目,如此顺利地A掉第一道题让我们更加有把握。接着孔看出了J道题 complex square是以前的原题,是一道有一些陷阱的模拟,孔很有自信马上敲完了代码,也很顺利A掉了J题,前两题的顺利让我们轻松不少。接着我们都看出了A题 Cut cake也是一道原题,不过大家都没有什么印象了,我看了下题目,一道几何题,公式很好推,但是解不出来,于是我认为这是道二分逼近求解,于是我开始敲这道题,他们开始读其他题目。我在纸上随便画了个圆就推出了这个公式,但是当时为使用弧度还是角度纠结了一下,接着决定使用弧度,将公式化简。很快敲完代码,但是一直过不去。最后拉来孔,发现有个错误,就是不应该用(1/2)而是(1.0/2),这是我的疏忽之处。改完这点,我们很顺利A掉了这道题。当时A掉这道题还没到11点半,比赛是10点开始的,我们当时名次好像是在20左右。但是下面3个半小时,我们就真正看出了差距。
首先看当时全场很多队伍都升起了紫球,也就是E题 cinema。当时符已经读完题,他开始敲代码,我重新读E题,孔继续读其他题,他读的是是I题(当时全场很多队也生起了这个银球)。E题的数据量是N《=10000,当然不可能是搜索,我当时也排除了DP,很肯定的认为这是贪心。再看N个点的图只有N-1条边形成最小树,这是一个稀疏图。接着看符,他好像一直过不了一组数据。我重新读题,符的代码是用邻接矩阵写的,他也认为是贪心,后来经过讨论,发现他的算法在于没有进行取点后的更新。我们当时的算法是每次选取邻点最多的点,再进行更新。而这时候问题就出来了,怎么进行更新和怎么进行每次找最优点,因为N到了10的四次方,我们如果处理不好以上两项就会造成超时,于是我决定用邻接表写,并且我不知道如果开10的四次乘以10的四次的整数矩阵会不会内存不足。接着我就想构造一个结构体,就是建N个链表,每个表记录每个点和他相邻的点,接着表头有个值NUM记录邻边数,每次选NUM最大的,接着遍历这个表,把存在于这个表中的点的NUM-1.这样就很快的完成了删除操作,但是对于每次选最优点依然很棘手。当时我想到了用堆去写它(这样就可以快速选取最优点),接着想STL,最后实在没有想出用哪个库可以写出来。于是准备用指针写,可是实在写的很乱,最后我只能作罢。比赛结束后和秦的讨论才知道,贪心是不行的,例如1-2-3-4-5-6,用贪心写得到3,而正解是2。后来听老师说是树状DP,我也只能苦笑,实在算法掌握得太少了。另外对STL的掌握要加强和不要轻易用贪心,总有些题目表现看上去是贪心,其实却最有可能不是贪心。。。
当时决定放弃这道题已经是1点了,我们的名次已经掉到了30左右,孔上机开始写I道题。我们开始重新读题,数据量是N=300,我们经过讨论,认为这是搜索。孔很快敲完那道题目的代码,很快过了例题给的数据,但是有一组数据一直过不去:1,3,8,12,13,23,33.我重新看了他的DFS,最后我们经过很纠结的一个过程,我自己总结他的DFS里有2个主要漏洞:1.误将层数作为对象的序号,即把K当作i;2.如果找不到可以配对的数,那么就需要重新建立一根柱子,但是这个柱子上的第一个数不应该是从上一个对象后面的数开始找,而应该是从头到尾的第一个没有被用到的那个数开始找。比如上面这组数据,如果用原来的DFS,得到的最终答案是,首先会用到第一个柱子,上面的数字为1,3,13;第二根柱子 12;第三根柱子 23;第四根柱子 33。得到需要4根柱子的答案。也就是直接不要8了。而经过修改得到的是1,3,33;8;12,13,23;也就是需要3根柱子的答案。经过修改的DFS过掉了另外一些数据后,我们准备提交看看,接着极其自然的,我们TLE。。。。。。接着我们还是认为这是搜索,并且我当时认为肯定能剪枝的,接着我就对那个DFS开始一阵剪枝,接着我们还是TLE。。。。。。当时我可能真的有些要着急想过了这个题,并且我是队长,这是我那场比赛做的不好的地方之一。后来据说还是树形DP。。。。。,我们在树形DP上载了两个跟头。
我们就这么纠结了3个半小时,直到比赛结束。最后名次是我们36,他们37,应该是二等奖中下部分的样子,因为我们不参与排名,更因为我们并不是因为这个奖来到这里。我们深深知道3道题和4道题的区别,我们读完题连他的真正算法都不知道,都从来没有敲过那个类型的算法,因为我们知道的算法真的太少了。认真学习算法,平时少用模板,明晓与强队的差距,还有学会ACM是团队的战斗,这就是这次比赛最大的收获。中山,华农的FINAL队的确很强,但是我们不应该用我们是大一来逃避掉我们实力和他们存在极大差距这一事实,ACM的赛场没有大一大二之分。
在走出赛场的时候,在看着FINAL队高举奖杯的时候,在火车上的时候,我默默告诉自己: 把心沉到谷底,踏踏实实得训练,总有一天,我们会有实力和他们一决雌雄。