Codeforces是一个俄国的算法学术活动网站,由来自萨拉托夫州立大学、由Mike Mirzayanov领导的一个团队创立和维护,是一个举办比赛、做题和交流的平台。blog功能可以求助/发布题解。官方语言是俄语和英语,因此可能有些偏僻的题目的题解是由俄语编写的。
Codeforces很大的特点就是题目兼容并蓄,什么难度等级的题目都可以找到。并且题目很有意思,思维题较多,常常伴随着出题人的陷阱等等。Codeforces另外一个很大的特点就是它有自己的上分系统,基本上每周会举办一到两次在线的算法比赛。一般的比赛时长是两个小时,只要注册账号就可以免费参加。由于参加的选手水平实力不一致,所以它开设了好几个档次(div),不同层次的选手面对的题目难度也不一样,这样保证了大家都可以参赛。
关于比赛
在Codeforces上,每名用户都拥有比赛积分(即Rating)(新用户默认为1500),比赛积分会影响用户的名字颜色。
在比赛中,选手有2个小时的时间去解决5道题,而解决某题得到的分数由该题当前的分数减去(不成功的提交次数)*50,这里,某道题的分数是由比赛开始时的分数随时间线性减少得到的。同时,这里的“解决某道题”是指Pretest Passed,即,通过了一次仅含部分测试点的测评,而最终决定是否得到这道题的分数,要看比赛结束后的统一测评(System Test),如果在这时没有通过,就称FST(Failed System Test)。在比赛中的提交可以看到在哪个测试点出了什么问题(例如,仅一行WA on pretest 3)。
同一个Div的选手将被划分到若干个Room里,每个Room大概30位选手;当某道题Pretest Passed之后,可以选择锁定(Lock)该题代码,之后就可以查看同一个Room内其他选手该题的代码(当然了,这也是已经通过pretest的),并试图找出其中的漏洞,自己出一个数据(可以手打,也可以提交数据生成器)让这个代码不能通过,这就是Hack,有时也称Challenge。一次成功的Hack可以得到100分,而如果没有成功,将会被扣50分,分别被称为(un)successful hacking attempt。
在比赛中,选手可以看到实时的排名(Standing),也可以选择只看加了好友的选手的排名。此外,还可以看到某题有多少人通过的信息,这在某些情况下很有用。
Top栏里基本上是大牛放出来的一些资料、博客和题解什么的。下图就是一个大牛整理的对于一些题目的解法,也附上了原题链接。
资深大牛描述一个问题或者是算法的时候自然不会用太晦涩的单词,在这里面可以学到很多知识和解题经验。
Contest栏目下是正在进行以及过去举办过的线上比赛。
比赛名称后面括号里div表示的是难度等级,div1是最高难度。需要有1900以上的rating才可以报名。div2难度会简单很多,基本上学过算法和数据结构都可以进去做个一两题。div2的比赛前两题基本上都不涉及什么算法,主要是考验思维。一般到了C题之后才会考察一些算法和数据结构。
Contest history是之前举办过的比赛,可以点进去练习,replay功能可以复盘当时的比赛的情况。
Gym在这里是练习题的意思,在这里可以查看当时比赛的排名,也可以进入比赛试卷练习。
Gym栏目下的大多是一些专业的比赛题以及ACM的练习题,和Contest里面的题比起来Gym里面的题难度会更大一些。并且也会有各种算法和数据结构的专题。虽然看起来难度更大,但是里面的题目也是有区分度的,并不是每一题都很难,完成部分题目还是可以做到的。
Codeforces当中的比赛一般有5道题,由于只有两个小时的时间,我们一般也很难把5道题都做完。基本上能做出来三题左右,rating就不会下跌。当然rating的涨跌情况也和你当前的rating有关,系统会根据你现在的rating对你的表现有一个期望,最终的涨跌就是你实际表现和这个期望的差值。一般小白做两题可能就可以涨分,如果当前rating已经很高的话,也只做了两题,rating肯定是下跌的。
在比赛的时候可以实时看到每一道题有多少人做对,这对于我们做题的优先级帮助是非常大的。一般来讲越前面的题目越简单,但也有例外,经常有些题目暗藏陷阱,虽然题目看起来简单,想要完全做对也是很难的。
比赛期间我们是可以查看其它选手的代码的,有一个栏目叫Room,在比赛的时候系统会随机分配房间。你可以查看同房间内通过了同样问题的人的代码。
Codeforces在比赛的时候只会测试一小部分数据,真正的测试集会放到赛后进行测试。所以在比赛中测试通过的代码,只要通过了小数据验证,很有可能有隐藏的问题没被发现。当你通过了这道题之后,你就可以去查看其他通过人的代码,去分析它们有没有问题,如果发现了bug,可以构造一份数据hack掉他的提交。hack成功之后,你会获得分数的奖励。
你可以双击打开其他人的提交记录,去阅读他们的代码。到了比赛后期,能做的问题做的差不多了之后,就进入了紧张刺激的互相hack阶段。很多参赛者的乐趣就在于此。
Problemset栏目下是练习题,和我们国内的许多OJ形式差不多,觉得打一场比赛阵线过长的,可以利用碎片化的时间来这里练习。
若在做题过程中遇到了困难,那么可以选择查看题解:
找到题目侧边栏中的"Contest materials",然后单击"Tutorial"或者"Editoral",会有英语(极少数为俄语)题解。
Codeforces上的提交记录和代码都是公开的,你可以找到该题其它人的提交记录,查看代码。
注意:不要提交其它人的代码,否则您会被警告甚至会被封号。
更多赛事信息及参赛经验分享 ,请扫码添加翰林顾问老师详细咨询
还有不定期的高能讲座等你来参加!
© 2025. All Rights Reserved. 沪ICP备2023009024号-1