Codeforces介绍(工作向)

首先,我已经工作好几年了。不搞ACM很多年了,然后当年是个蒟蒻,现在比当年更弱了。所以这篇文章主要针对的是已经工作的朋友,而且是从事非算法相关的工作的开发朋友。


Codeforces是什么?

Codeforces是一个俄罗斯的OJ(Online Judge)。上面会有各种各样的题目和各种各样的比赛,用户可以阅读上面的题目,写出相应的代码并提交。网站会判断你的代码是否正确。


Codeforces的特点

Codeforces具有比赛密度高、题目质量不错、难度覆盖全、各种主题比较明确的特点。

对比国内各大高校OJ,就我个人的主观观察和认识来看,窃以为Codeforces的比赛密度更高,题目质量也不差。毕竟是全球的玩家都在往上面出题,数目多,质量不差也是必然的。

而且Codeforces每场比赛的难度比较均衡,比如在开始做一场比赛的题目之前,我们可以根据自身水平预估一下大概能做到什么程度。而各大高校OJ上的比赛,就看出题人的情况了。遇到一场巨巨们的XXX专题训练,和遇到愉快的周末练习,能过什么题就看缘分了。

Codeforces的题目具有明确的难度划分和主题划分。难度从800分的超级水题到3500分只有20+的人过的神题都有。主题也是覆盖数论、图论、dp、数据结构、网络流等等ACM常见算法。因此,如果有需要,可以来一场3500分题目组成的dp专题训练。

另外Codeforces是全英文的(或者是全俄文的,如果你愿意看的话)。也算是能练练英文阅读,尤其是能练习对各种谜之主题的阅读。

俄文阅读无压力,真诚脸。

Codeforces的难度

Codeforces的难度一般来说,是一场比赛题目号数越高,难度越高。比如G题一般会比A题难。

Codeforces难度覆盖的面已经比较广了。尤其是加了Div3之后,已经覆盖到了完全没有难度的题目。比如#697的A题:给你一个n。问你是否存在一个非1的奇数能整除n。

总的来说Div3的难度其实是比较普世的。前几道题目基本是需要思考一下,想到一个特性或者想到一个可行的做法,就能轻松解决。后面的题目主要是特性藏得稍微深一点,或者加一个二分或者比较水的dp之类的。总的来说,非常基础。

Codeforces Round #697 Div3题解
感觉这套Div3有点东西的。G题是一道极限时间+基础dp+基础数论。F的模拟稍嫌恶心。D看着像是DP,其实就是贪心+二分还是有点意思的。不算是手速场。D题G题差不多能对标Div2的C的感觉。
以697为例,D题就是个二分。G题就是一个水dp,然后卡一下时间限制。

目前Div3和Div2没有任何的联动。也就是Div3的题目不会出现在Div2中。如果要对标的话,可能Div3的最后一题大概是Div2的C题的水平。

Div2一般是和Div1一起出现(虽然也有Div2 only的比赛)。一般Div2的C题或者D题就是Div1的A题。相应的Div2D题或者E题就是Div1的B题。

Div2的难度我就斗胆说一下,毕竟现在也不是稳定的能AK,但还是斗胆说一下。

Div2的AB题基本没什么太大的难度,基本就是一个显然的特性,写下来就好。C题、D题一般是思维题、水dp或者水数据结构之类的。思维题看缘分,缘分到了可能卡一下,至于水dp或者水数据结构基本就是会就能做。到了E题F题基本就开始一些比较随缘了。基本什么都可能遇到。

Codeforces Round #708 Div2题解
唉,确实能力下降了不少。E2硬是到嘴边的DP没推出来。也算是进一步了解目前Codeforces相比几年前的难度变化。虽然这一场是一个div2 only,但个人感觉这场dev2 only还是偏水了一些。因为题目分easy version和hard version之后,相当于给了一个梯子。(虽然给了梯子我还是没想到,我是真的菜)
以708为例,E2是一个dp,但是就没想到……
Codeforces Round #704 Div2题解——模拟专场
这一场相对一般的Div2简单很多。每个题都不是特别复杂的样子。主要都是思维性和模拟类的题目,没啥好困难的,就是写着是真的恶心。而我又比较弱,手特别抖,就显得特别难受。
以704为例,全是模拟题,都是看了就知道怎么做,但是不想写的类型

Div1我就不敢评价了。因为我是蒟蒻,我只能做到Div2 AK,也就是做一半的样子。所以就不误人子弟了。

总之,Codeforces的难度其实主要就是:啊,我居然没想到这个——思维能力不够。俗称:菜。


为什么要刷Codeforces

因为想不到。而从想不到变成想到的这个过程是一个漫长的过程。

比如我们可以通过题解,得知一道Div1E题的做法。并且发现这个做法其实很简单。但其实这并不简单,因为很可能当真正面对另外一个类似问题的时候还是想不到,需要依赖题解。

再具体一点比如dp,dp谁不会呢?遇到具体问题的时候,是不是一定能想到状态转移呢?想到了,结果一看是$n^3$的状态转移,再一看数据规模,$n^2$都得超时,更不要说是$n^3$了。那是否又能想到怎么优化呢?

我们说,贪心可能简单一些。但贪心不一定是$f(x)$这一层贪心,保不齐是$f'(x)$那一层贪心呢?那么在遇到这个问题的时候是否能想到呢?即使想到了,交上去,发现不对。那么一个灵魂拷问就是:到底是我的贪心不对,还是我代码写错了?

刷Codeforces的乐趣其实就在这里。因为想不到。因为突然发现自己脑子不好使了。这个时候,来几场紧张刺激的Codeforces,可能想不到的就慢慢变成能想到了。


为什么不刷Codeforces

  1. 找工作用不到的。都卷到CF的地步了?我觉得我还是转行来的实在。我自问刷的各种题和CF平时工作没啥用……
  2. 精力投入大。坐在那一下午,就想一个问题,然后想不到。想到了确实很爽,但是想不到就有点难受了。不管过不过,完了都得歇一会儿。
  3. 时间投入大,比赛太频繁了。4天后一场Div3不水一发?跟着10天后一场Div2不AK一把?不说多了,一大半的空余时间没了。

关于我

我是蒟蒻。只能慢慢做,一整天才能出一场Div2的水平。比赛是不敢打的,看平时提交就知道了,手抖脑抽,打一场掉一场没必要。

但是呢,虽然菜,虽然工作了很多年了。但偶尔刷刷CF感觉还是比较愉悦的。


最后,许个愿。但愿本站能够比CF的可靠性更高。(日常黑CF:1/1,CF的网站稳定性那叫一个刺激。)