平台简介&计分方式
Codeforces是一家为计算机编程爱好者提供在线评测系统的俄罗斯网站。该网站来自萨拉托夫州立大学。由Mike Mirzayanov领导的一个团队创立和维护,是举办比赛、做题和交流的平台。
网站中 “交流” 指的是自带blog功能, 可以求助/发布题解之类,能够与各国赛手针对某一问题进行研究。官方语言是俄语和英语,俄语可以使用Google Translate翻成英文,可读性还是很不错的。
Codeforces 最大的特点是比赛,在Codeforces中所有的用户根据在以往比赛中的成绩与表现被赋予一个Rating(等级)并冠以不同的等级头衔,名字也会以不同的颜色显示。在没有打任何Codeforces的比赛前,你是“unrated”(暂未评级),名字颜色是黑色。rating=1500(不显示,只有打了比赛之后才会体现出来)。
打过比赛后,就会变成“rated”,且会有如下评级:
①灰名,Newbie(新手):rating<1200;
②绿名,Pupil(入门):1200≤rating<1400;
③青名,Specialist(专家) 1400≤rating<1600;
④蓝名,Expert(行家):1600≤rating<1900;
大部分OIer都在绿,青,蓝名之间
⑤紫名,Candidate master(能手):1900≤rating<2100;
⑥橙名,Master(主宰):2100≤rating<2300;
到了橙名就能算得上是OI界的高手了,差不多在世界前1000左右(不包括没有用Codeforces的)
⑦橙名,International Master(国际主宰):
2300≤rating<2400;
⑧红名,Grandmaster(特级大师):
2400≤rating<2600;
⑨红名,International Grandmaster(国际特级大师):
2600≤rating<3000;
⑩黑红名,legendary Grandmaster(传奇特级大师):
3000≤rating;
选手们按Rating以1700为界划分为Div.1和Div.2两类,Codeforces上会注释Div.1还是Div.2,或同时进行Div.1的比赛较难;如果同时进行,Div.1的ABC三题会和Div.2的CDE三题相同。
每次比赛结束后Rating会根据之前各个选手的Rating和公式重新计算。对于没有参加过比赛的新用户,Rating会被视为1500,作为初始分值。
在比赛中,选手需要在2小时内解决5道题,而解决某题得到的分数由该题当前的分数减去(不成功的提交次数)*50这里某道题的分数是由比赛开始时的分数随时间线性减少得到的。同时, “解决某道题” 是指Pretest Passed 即:通过了一次仅含部分测试点的测评,而最终决定是否得到这道题的分数,要看比赛结束后的统一测评(System Test) 如果在这时没有通过,就称FST(Failed System Test) 在比赛中的提交可以看到在哪个测试点出了什么问题(例如,仅一行WA on pretest 3)
codeforces当中的比赛一般有六道题,由于一般情况限时2小时,很难把6道题都做完。基本上能够完成三题,rating就不会跌了。当然rating的涨跌情况也和你现在的rating是有关系的,系统会根据现在的rating生成一个期望值,最终的rating就是实际表现和期望值的差值。例:菜鸟做两题可能就可以涨分,但如果目前的rating已经很高的话,也完成两题,分数肯定是跌的。
与其他比赛不同的是:Codeforces设置了Hack环节。同一个Div的选手将被划分到多个Room里,当某一题目Pretest Passed之后,可以选择锁定(Lock)该题代码。之后就可以查看同一个Room内其他选手该题的代码 (已经通过pretest的) ,并试图找到其代码中的漏洞,模拟出一个数据 (可以手打,也可以提交数据生成器) 使代码不能通过,这就是Hack。 一次成功的Hack可以得到100分,而如果没有成功,将会被扣50分。因而需要赛手们谨慎使用Hack权限。能否Hack成功,分别被称为(un)successful hacking attempt
如果在【 留学背景提升 / 国际学术活动(报名&备考)】方面
需要支持和帮助的话,欢迎扫码联系我们
还能免费获得一对一学术活动规划!
注册&使用Codeforces
1.首先,输入codeforces点击进入
2. 进入之后,你将会看到这样的一个页面,先点击左上角,Register(注册)
3. 按照提示输入信息,完成之后,Register一下
4.如图
5.单击任一比赛Enter进入,可以查看题目与要求
6.选择题目单击,进入问题
7.完成题目后,会出现以下界面
8.若未AC,点击题号查看错误原因
Codeforces科学刷题
据说大神们的刷题量都是上万的,所以正式比赛里可以看到诸多大神不到一分钟就秒了一道题,手速太快。对Competitive Programming而言,把题目做对是基本要求(题目太难则另当别论),用更快的速度求解才是顶尖高手之间的核心区别。如果说真的有天赋存在的话,那我们也无能为力;但希望能像卖油翁一样说出【无他,但手熟尔】。下面需要了解一些关于Codeforces比赛中一些常规的问题以及难度分布。
下图反映比赛中问题分布频率,展示不同算法(第一列)在不同问题难度(第一行)上的分布频率情况(这里没有展示Div1和Div2之间的差别,仅仅是按照题号A、B、C……来推断难度)。
基于该图,大概可以知道在什么样的水平下应该掌握什么样的算法。
可以看到对简单的A题而言,大部分都是考察基本的编程功底,诸如implementation(大概就是题目说什么,你做什么就是了),math(四则运算、取模取整等等)以及brute force(暴力枚举)。而随着难度的增加,比如说E题,主要就在于考察对dp(动态规划),data structures(数据结构)。当然了,从图中也可以看出,高难度题目主要在math,geometry(计算几何),shortest path(图论)以及games(博弈)上。
Codeforces_Algorithms_Tag_Frequency.jpg
下图反映了不同算法在不同问题难度上被解决次数的频率分布。
以下是搬运了知乎上一位赛手的刷题经验:
只做构造题(难度随自己 rating 变动),并且只要连续思考 10 分钟没有任何进展时,就直接去看题解(如果有进展就将计时器归零)。事实证明这个方法对我非常有效,毕竟这些题目所需要的常用技巧(tricks)是有限的。
不要觉得看题解是一件很丧气的事情,有时候没想出来只是因为你不了解这道题需要的 trick。
我最大的收获就是熟练掌握了「从特殊到一般」的技巧。大多数题目是不能一眼看出规律的,这就需要从小数据或特殊数据出发(比如元素值只有 0 和 1),去研究并发现性质和规律。在做构造题时,应当重点摸索和体会这一技巧。
作者:灵茶山艾府
链接:
https://www.zhihu.com/question/353734418/answer/2353160035
来源:知乎
最后:
附 "ALL" CodeForces Rounds Tutorial By iman_MC
codeforces.com/blog/entry/1492
有些Codeforces上有人发过的题解并没有被链接到对应的题目上(即存在题解,但是题目页面右下方并没有Tutorial链接),有可能可以在这里找到。
© 2025. All Rights Reserved. 沪ICP备2023009024号-1