今天讲一个类似于ACM的一个比赛,或者说一个比赛平台——topcoder。
本身topcoder是一个公司,具体的历史前世今身请自行google。
当然,这个比赛完全是“群众性质”的,学校不会给加分奖金乘系数,奔着这些参加比赛的请点右上角的叉且永远不要回来。
topcoder的题目于ACM,类似,甚至可以理解为一样。都是关于编程能力、算法的测试。TC中的简单题比ACM比赛中的简单题还要简单,几乎不涉及任何算法——不涉及算法的意思其实就是无论你搞不搞ACM,你都应该会的。
但TC的规则与ACM有很大区别,首先每场比赛只有三道题,时间75分钟。每道题有一个对应于难度的分值,通常是250/500/1000.每道题都是从第一次打开这个题目开始计时,最开始分值为原始题目分值,随着时间的流逝而下降,具体下降幅度有一个很复杂的公式。直到最后提交代码截止计时,当前分数就是这道题得到的分数。因此对做题速度有很高的要求。通常情况下,500的题无论花多长时间得到的分数都不会低于250,而1000的也不会降到500以下,因而做出难题比做出简单题更有用。如何在75分钟内分配时间做这三道题需要根据自己的习惯、能力来决定。
最后根据三道题得分总和(不打开某道题或不提交某道题算0分)得出coding阶段的得分。
第二阶段是challenge阶段,这是TC最大的特色。
这个阶段通常有15分钟左右,你要做的唯一的工作就是看别人的代码是否有问题。可以看出coding阶段只通过提交速度来给分数,并不知道是否正确,这个阶段你可以看任何人提交的任何题目的代码,如果觉得有问题,你可以提交一组符合题意的数据,系统会运行他的代码测试这个数据并与标准输出进行比对,如果有差错就说明他确实错了而你成功的cha了他的这道题,你会有50分的加分奖励而他那道题的分数变为0.当然,为了防止胡乱测试,失败的challenge会让你倒扣25分。
这个规则意味着你需要很强的阅读别人代码的能力。
最后一个阶段就是传统的system test,系统将没被cha掉的代码集中用系统准备好的测试数据测试(可能会包含第二阶段成功cha掉别人代码的数据),数据一般都有几十组,各个情况都会考虑,基本上不会有漏网之鱼。一旦被发现错误那道题直接变成0分。
最后,每个人的最终分数就出来了。根据每个人的分数排名,然后TC有一个很经典也很复杂的rating系统,说白了就是每个人都有一个积分。每次排名出来之后会根据前一次的积分、波动指数Volatility来确定新的rating和Volatility。近期波动越大意味着下一次波动(无论上升下降)会更大,反之一样。
不同的rating会用不同的颜色区分,灰色最菜,红色最强,还有几十个是靶心的图标,都是一群神级人物。
以1200为界,1200+的参加DIV 1的比赛,1200-的参加DIV2的比赛,DIV I显然题目更难,通常DIV 1的250分的题跟DIV 2的500是一样的题目。
大致把topcoder的规则什么的说完了,现在说如何参加。
首先,官网是www.topcoder.com,进去之后注册,具体略去。topcoder有各种各样的比赛,可以看看,记住我们主要参加的是算法Algorithm的比赛就可以了。
topcoder用一个java applet写的专用程序进行比赛,点左面的Algorithm然后下面的Launch Arena可以下载一个jpnl文件,有JRE就可以直接运行。登陆后进入主界面。
进去之后其实就是一个聊天室……每个人的ID都会列出来,根据积分不同颜色不同。
没有比赛的时候,会开放practice room,我们要参加的算法比赛绝大多数都叫做SRM(single round match),因此在SRM里点某一次的比赛然后选等级就可以进到那次比赛的练习房。那里可以正常做题、cha别人,手动运行system test,除了无时间限制之外其余都跟正规比赛无区别。当然做题也是要算时间和所对应得到的分数的。
每次有新的SRM的时候(一般半个月左右一次),会提前大约十几个小时发邮件通知你具体时间。比赛开始前几个小时开始注册,开始前5分钟停止。active contest就是当前进行的比赛,点注册就是注册,等比赛快开始了点enter就是进入自己的房间。
因为要cha别人代码,因此每次比赛每个人会分到不同的room下,基本上一个房间会有从最高分到最低分不同水平的人,每个房间20人。右上角有倒计时限制,想看某道题直接打开即可,但要记住第一次打开开始计时,直到最后提交截止,所以除非不会做,不要轻易在一道题未完成的情况下开下一题。
具体的就自己体验吧。本文主要目的是为了让你知道什么是topcoder,其余的其实都应该自己学会的。
然后topcoder程序默认是用里面的窗口写代码,但可以用插件来增强功能,具体的请google。
发表回复