全世界最强的算法平台codeforces究竟有什么魅力?
大家好,之前说过由于和LeetCode结了梁子,所以周末的LeetCode专题取消了,给大家写点其他专题的算法问题。目前选择的是国外著名的编程竞赛平台——codeforces。它在竞赛圈名气比较大,对于普通大学生而言可能了解不多。所以今天这篇文章简单和大家介绍一下codeforces这个网站,以及它的使用方法。
链接:codeforces.com
codeforces简介
简单介绍一下codeforces这个网站,codeforces位于宇宙编程最强的毛国。据说最早是由俄罗斯的一群大学生维护的,它最大的特点就是代码和题解的公开。所有人都可以随意查看其它大牛的代码,可以说是非常具有开源精神了。
codeforces很大的特点就是题目兼容并蓄,什么难度等级的题目都可以找到。并且题目很有意思,往往思维陷阱比较多,也就是思维题比较多。对于数据结构以及算法的考察相对弱一些,更多的时候往往是告诉你用什么算法你也不知道怎么做……
codeforces另外一个很大的特点就是它有自己的上分系统,基本上每周会举办一到两次在线的算法比赛。一般的比赛时长是两个小时,只要注册账号就可以免费参加。我记得当年第一次参加比赛会获得一个初始分是1500,然后根据你在比赛当中的表现上分或者减分。由于参加的选手水平实力强度不一,所以它开设了好几个档次(div),不同层次的选手面对的题目难度也不一样,这样保证了大家都可以愉快地参赛。
这块内容比较重要,我们放在后面详细介绍。
基本功能
简介介绍一下codeforces当中的功能以及页面,这个是首页的banner,我们挑几个比较重要的来介绍一下。

TOP
首先是Top,top里基本上是大牛放出来的一些资料、博客和题解什么的。比如下图就是一个大牛整理的一些算法和数据结构的经典问题整理。

这里面干货还是很多的,但是由于是国外的网站,所以显然肯定是全英文的。不过也不要惧怕,大家都是技术男,而且大多数不是native。描述一个问题或者是算法的时候也不会使用太晦涩的单词,所以还是蛮好懂的。另外现在在线翻译功能也很发达,我当年英语很差的时候都没什么压力,所以大家也不要担心。
contest
第二个重要的栏目是contest,里面是正在进行以及过去举办过的线上比赛。

比如上图就是目前的一个比赛安排计划,即将开始的比赛会多出来一个register按钮,让大家注册参加。
比赛名称后面括号里div表示的是难度等级,div1是最高难度。需要有1900以上的rating才可以报名。div2难度会简单很多,基本上学过算法和数据结构都可以进去做个一两题。div2的比赛前两题基本上都不涉及什么算法,主要是考验思维。一般到了C题之后才会考察一些算法和数据结构。

这张图是之前举办过的比赛,我们也可以点进去练习,它还提供replay功能,可以模拟当时的比赛的情况。
gym
gym英文是健身房的意思,这里顾名思义可以理解成练习题。

gym栏目下的一般是一些专业的比赛题以及acm的练习题,和contest里面的题比起来gym里面的题难度会更大一些。并且也会有各种算法和数据结构的专题。虽然看起来难度更大,但是里面的题目也是有区分度的,并不是每一题都很难,即使水平一般也是可以做一两道的。
首页当中比较常用的功能就是这些,后面还有像是小组、天梯、日历等一些功能,由于不是非常常用,这里就不多赘述了。
比赛
最后介绍一下codeforces当中的比赛,这个是它起家的核心功能,不能不提。
codeforces当中的比赛一般有六道题,由于只有两个小时的时间,我们一般也很难把6道题都做完。基本上能做出来三题,rating就不会跌了。当然rating的涨跌情况也和你现在的rating有关,系统会根据你现在的rating对你的表现有一个期望,你最终的涨跌就是你实际表现和这个期望的差值。菜鸟做两题可能就可以涨分,但如果你现在rating已经很高的话,你也做了两题,那你肯定是跌的。

我们在比赛的时候可以实时看到每一道题过了多少人,这个有助于帮助我们选择题目。一般来说越前面的题目越简单,但是也有例外,比如有些题藏了一些陷阱,虽然简单,但是很多人没想到都挂在上面,这是常有的事。
当我们比赛的时候,经常会出现一种情况,就是我们做了3题之后还有时间,但是后面的题目一时想不出来了。这个时候多了时间可以干嘛呢,可以查看其它选手的代码。我们可以看到这里有一个栏目叫Room,在比赛的时候系统会随机分配房间。你可以查看同房间内通过了同样问题的人的代码。
codeforces在比赛的时候只会测试一小部分数据,真正的测试集会放到赛后进行测试。所以在比赛中测试通过的代码,只是通过了小数据验证,很有可能有隐藏的问题没被发现。当你通过了这道题之后,你就可以去查看其他通过人的代码,去分析它们有没有问题,如果发现了bug,可以构造一份数据hack掉他的提交。hack成功之后,你会获得分数的奖励。

你可以双击打开其他人的提交记录,去阅读他们的代码。到了比赛后期,能做的问题做的差不多了之后,就进入了紧张刺激的互相hack阶段。讲道理,这比只是单纯做题的竞赛要有趣多了。
以前我们acm集训队经常晚上一起打codeforces的比赛,有时候看到队友在一个房间里,还会互相关注一下近况,互相hack一把,不得不说现在怀念起来还是非常有意思的。
好了,关于codeforces网站就介绍到这里了,如果你也对算法感兴趣的话,不妨试着用一下它吧,相信你也会找到算法的乐趣。
衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发)
本文使用 mdnice 排版
- END -
{{uploading-image-349576.png(uploading...)}}
全世界最强的算法平台codeforces究竟有什么魅力?的更多相关文章
- [USACO2004][poj2375]Cow Ski Area(在特殊图上用floodfill代替强联通算法)
http://poj.org/problem?id=2375 题意:一个500*500的矩形,每个格子都有一个高度,不能从高度低的格子滑到高度高的格子(但相等高度可以滑),已知可以在2个相邻格子上加桥 ...
- 莫队算法初识~~CodeForces - 617E
E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- 算法导论学习笔记1---排序算法(平台:gcc 4.6.7)
平台:Ubuntu 12.04/gcc 4.6.7 插入排序 #include<vector> #include <algorithm> #include<iostrea ...
- 【随机化算法】codeforces Matrix God
http://codeforces.com/gym/101341 [题意] 给定三个方阵A,B,C,问AB=C是否成立? 方阵的规模最大为1000 [思路] 求AB的时间复杂度为n*n*n,会超时 左 ...
- 强算KMeans聚类算法演示器
这些天做C#实验以及这个KMeans算法演示器,学了一下openGL,感觉有待加强. //Point.h /* Point 结构体定义及实现 结构体重载了2个运算符: 1.== //推断两个Point ...
- 精通visual c++指纹模式识别系统算法及实现
通过学习,掌握以下几个问题: 1.核心算法,并且向GVF衍生: 2.核心库封装的方法 2016年11月16日06:52:51 昨日实现了梯度场和频率场的计算.最大的感觉就是建立基础代码库的重要性. 如 ...
- 《算法设计手册》面试题解答 第五章:图的遍历 附:DFS应用之找挂接点
第五章面试题解答 5-31. DFS和BFS使用了哪些数据结构? 解析: 其实刚读完这一章,我一开始想到的是用邻接表来表示图,但其实用邻接矩阵也能实现啊?后来才发现应该回答,BFS用队列实现:DFS可 ...
- 算法入门(C++)
iostream,这个头文件里有很多常用的函数,比如swap交换两个变量的值,max求两个值的最大值等. cstdio头文件,这个头文件里包含C风格的输入输出.如果你之前学习过C++语言应该知道cin ...
- 机器学习--详解人脸对齐算法SDM-LBF
引自:http://blog.csdn.net/taily_duan/article/details/54584040 人脸对齐之SDM(Supervised Descent Method) 人脸对齐 ...
随机推荐
- .net core 中的经典设计模式的应用
.net core 中的经典设计模式的应用 Intro 前段时间我们介绍了23种设计模式,今天来分享一下 asp.net core 种我觉得比较典型的设计模式的应用 实例 责任链模式 asp.net ...
- Mac搭建appium环境
1.安装brew 查看是否已经装上brew,终端输入命令:brew --version,已经装上的就不用再装了: 如果没有安装,终端输入命令:ruby -e "$(curl -fsSL ht ...
- 断言函数-RF
测试用例的目的是要验证一些操作否符合我们的预期结果,所以在测试用例中,断言函数是必不可少的一项.我们做的每一步操作都会有预期的结果,为了保证操作得到的结果符合预期,我们需要在测试用例中添加断言,来保证 ...
- python爬取酷我音乐(收费也可)
第一次创作,请多指教 环境:Python3.8,开发工具:Pycharm 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的 ...
- android开发之gridView的一些属性。(项目经验总结)
1.android:numColumns="auto_fit" //GridView的列数设置为自动 2.android:columnWidth="90dp &quo ...
- 初学WebGL引擎-BabylonJS:第6篇-碰撞交错与挑选
[playground]-collisions(碰撞) 先贴官方源码(机器翻译版本) var createScene = function () { var scene = new BABYLON.S ...
- RTS寻路算法
https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html https://www.zhihu.com/question/2 ...
- 深入了解Netty【八】TCP拆包、粘包和解决方案
1.TCP协议传输过程 TCP协议是面向流的协议,是流式的,没有业务上的分段,只会根据当前套接字缓冲区的情况进行拆包或者粘包: 发送端的字节流都会先传入缓冲区,再通过网络传入到接收端的缓冲区中,最终由 ...
- Codeforces 1321C Remove Adjacent
题意 给你一个字符串,字符\(s_i\)可以被伤处当且仅当\(s_{i-1}=s_i-1\)或\(s_{i+1}=s_i-1\).问最多能删几个字符. 解题思路 其实,有个很简单的做法就是从\(z\) ...
- 利用递归方法实现链表反转、前N个节点反转以及中间部分节点反转
一.反转整个链表 问题:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5-&g ...