向往的比赛,继续训练。。。。

摘自庄神博客

 

 

 

对于退役的ACMer来说,最受期待的,便是每年五、六月份的个人赛季。此季弥漫了各种著名公司的各种比赛,包括各种开发类、乱搞类、RP类以及算法类的比赛。基于本人实在实力有限,时间有限,于是只能选了其中一些比较土的诸如算法类的比赛进行乱搞。比较幸运的是乱搞拿到了三件衣服以及一盏破灯,于是希望明年能够会有更大的进步,特总结如下。

 

  (1)BaiDu Astar

  百度的初赛一改以往的算法选拔,而采取更加有趣味性的AI设计作为晋级标准。相信很多的选手可能一时不能适应这种马拉松式的比赛风格,作为一向引领国内比赛潮流的Astar系列比赛,如此的改革应该算把算法竞赛从纯粹的竞赛延伸到了应用之上,因此更需要细心的debug以及工程化的能力。初赛的题目来自于2010队式比赛的原题,要求为5只坦克设计一个AI,使得在那在对战中能够首先使己方达到1000个资源。写出的代码会被编译为linux下的so文件,然后平台将每隔一端时间调用双方的AI各一次,得到下一步的行动指令,继而模拟整个比赛的进行。

  起初对于这类的题目,有很多的想法,但感觉很难用代码去刻画。在经历了无数挣扎以及乱搞委员会神群内各大神牛的指导后,终于还是有了一点起色。尤其是hhanger大牛,手写了多线程的竞赛模拟程序(http://www.hhanger.com/pk.txt),使得AI的调试有了比较好的参考性。事实上可以把这类AI分为寻路和开火两类去做,我的想法估计跟大多数人一样,使用了5st的阵形,首先对每个坦克的开火进行处理,使用比较暴力的dfs搜索出一个能在保持对方最大伤亡情况下,使己方最有利的火力安排,然后每个矿点进行反向搜索,得到对各个矿点到坦克的距离,最后使用KM算法,左点对应坦克,右点对应矿点,对未有开火任务的坦克求得矿点的分配的任务列表,对于每个坦克返回各自的任务。在调整了一些参数以及竞赛模拟结果比较好的情况下,便交了这样的AI,得到了晋级的资格(虽然貌似写得很简单也能得到资格)。

  大概挣扎了很久,百度的复赛在考cet6的日子举行了,于是果断放弃考试,开始了为期8个小时的苦力。今年的题目比较有个性,首先是2道确定性算法,然后是3道得到较优解的算法,有各种类型的,如交互题,策略分配题以及恶心的乱搞题,各种有趣的图片与背景比起同类比赛来说还是非常的赞。虽然忙了8小时,但丝毫没有倦意,只是手比较的麻木。中饭和晚饭都从简处理了,啃啃面包,过过IT民工的生活。由于比赛要进行2场,于是这2天有了比较好的作息习惯,晚睡早起身体好- -。由于比较正常的发挥,于是骗了件衣服回来,不过跟群内大神相比,自己实在是太弱了,于是似乎不仅要在SRM上锻炼自己的思维,也要在马拉松上锻炼自己的想象能力,方是王道呀,在此也祝福晋级的选手们能取得好成绩。

  (2)YouDao难题

  YouDao难题是网易去年起效仿BaiDu而举办的算法类竞赛,今年放弃了TopCoder的平台合作,转而向POJ寻求平台支持,于是用的新平台貌似不是很熟悉,bug不断,不过相信经过这次的比赛,YouDao难题会越来越好。晋级比赛分为比较漫长的三场赛事进行,其中第一场资格赛分为三轮进行,每轮取前400进入下一场赛事。于是有了世上淘汰率最高的比赛(晋级率1%?),而且由于题目出的比较的水,出题速度达到了令人乍舌的地步,于是做题的同时大叹江山代有人才出。第二场比赛估计是有道办的最悲剧的比赛,由于资格赛中中国选手的出色发挥,有道内部工作人员偏向于高估选手的实力,于是有道难题最后竟成了有道神题,第2场比赛的三道神题使最后完全做出1道的人寥寥无几,鉴于此工作人员竟然在比赛期间擅自改动规则,改动数据,以及各种不靠谱的搞法,使得选手们怨声载道,最后不得不折衷为全部晋级并为前300名选手发小灯的形式。第三场比赛倒是办得非常不错,必须在完成前2道ACM题的基础上做最后的MM题,事实上前两道题的难度并不高,A题非常暴力,B题目非常坑人,做出2道后就可以很开心地去搞MM赚晋级了。由于本人很菜,只搞了B题,A题由于对不上sample,调试了很久,赛后换了种搜索方式才过了数据。赞叹下来教主的强大,非常容易地搞定了MM,于是晋级现场。而Qinz阿姨继续在晋级路上大发神威,果然应验了阿姨阿姨世界无敌的预言。

  (3)TopCoder Open Contest

    TopCoder的全球公开赛已经有很久很久的历史了,应该说在我还不知道算法比赛前就有的算法比赛,因此它的平台以及规则非常的完善。与一般的竞赛不同,Topcoder的比赛注重的是快速的编码能力,以及很强的检错能力,似乎觉得这2者应该是相辅相成的。比赛一共分为5轮进行,基本上每一轮都要淘汰一半的人,最后剩下的不到20人进行最后的总决赛,对于这类比赛,本人一直信奉拿衣主义,对晋级决赛毫无追求。第一轮资格赛分为三场每轮晋级600人进行,在Q1轻松晋级后,做了下Q3,竟被一群水题搞到崩溃,还好最后的名次还算不错。资格赛后便是残酷的R1,最后晋级850人,晋级之路还是比较凶险的,最后能够成功保住名次,还是要感谢上天对我的眷顾….R2的前350名将拿到TCO的衣服并晋级R3,但事实上做R2的时候已经明显感觉到状态不行,草草做完250的题目后,就一直被500分卡,卡到最后,连250分都被人给cha了,最后查了下代码,发现连最简单的dfs都写搓了,于是狂跌rating实在是非常悲剧,其实更悲剧在于没拿到衣服。

  (4)Google Code Jam

  Google的比赛,在全球绝大多数程序员的心目中的地位都是非常高的,因此参加之人数,比赛竞争之激烈程度也是年复一年的增长。今年GCJ的题目似乎都比较晦涩难懂,凭借资格赛、R1、R2的发挥以及各种RP事件,有幸到了最后一轮,拿到了GCJ的衣服,由于对最后一轮没有想法,并且在第2天要进行英语考试,于是把号给了月光与来教主,自己玩了1个多小时后则回去寝室边复习边在QQ上与他们讨论各种想法,在月光强大的代码力下,三个人合作到了200多名,搞定了除C外的所有小数据,但是对于大数据之无能为力也暴露了大家在在解决大规模问题上的不足,哎,实在是太弱了。

  随着7月份的到来,个人赛的赛季也逐步落下了帷幕,这以后能拿衣服的就只剩下TCO MM一项比较靠谱,但估计本人乱搞能力还是比较有限的,还需要每天不断地思考想法,才能打进前100。总之这场赛季的战利品倒是比较多的,但终归每次被淘汰都显示出了在某一方面实力的欠缺,希望明年此时得到更大的进步了,Bless~

你可能感兴趣的:(ACM)