Codeforces是什么?对找工作有没有用?

您所在的位置:网站首页 学易优有用吗 Codeforces是什么?对找工作有没有用?

Codeforces是什么?对找工作有没有用?

2023-03-09 23:04| 来源: 网络整理| 查看: 265

在leetcode刷题上千的同时,我听说了另一个平台:codeforces。很多人可能会问,这个平台是干什么用的?简单来说,这是一个在线编程的平台,里面有各种各样的编程题目,各种各样的比赛,大家需要选择一门编程语言(C, C++,python等),根据输入,完成任务,输出结果。

比如说下面这个任务,一大堆废话,概括一下就是给一个1-100的数,如果能表示成两个偶数之和就返回YES,否则返回NO。

codeforces最简单的一道题,只要一个if条件句就可以算出结果

大家写好自己的代码,点击提交,当出现令人舒心无比的绿色Accepted的时候,就表示你这道题做对了。

之前我给大家科普过leetcode(力扣),leetcode也是一个在线编程的平台,不过和codeforces相比有很大区别,不管是从输入输出的方式,题目的语言(codeforces没有中文,大家必须要懂英文或者俄语才能做题),题目难度分布以及类型,都有很大不同。最大的区别就是,leetcode主要是用来找工作的,而codeforces主要用来搞竞赛的。

那么codeforces的主要功能是什么?其实就是比赛,大家要在规定时间(通常是两个小时)完成6-7题,当然了,真正的比赛很少有人真能把所有题都做出来,一般人能做出3道题就相当不错了。我参加了十几场比赛,不管整体难度如何,从来没有做对超过四道题,都快成魔咒了。

codeforces比赛界面,绿色表示你这道题暂时做对了,为啥只是暂时,后面会说

而且,绝大多数比赛,如果你成功AC (accepted),意味着这道题你稳了,可以放心进行下一题了。但codeforces不是,因为比赛过程只会测试一小部分数据,之后还要面对漫长的hack过程。hack顾名思义就是黑,用官方以外的数据挑战你的代码,某些比赛的hack时间长达12小时。在这个时间,如果有人发现你的代码有缺陷,在某些符合题目要求的输入里,会输出错误结果(WA)或者超时(TLE),他会直接hack你的代码,你的这道题分就没了。

如果你没有被hack,也不要得意,因为最后系统会把hack其他人成功的测试数据全部收集好,所有人统统再重新跑一遍。如果你的代码挂了,对不起,煮熟的鸭子飞了,这就叫Failed system test,简称FST,这是令人非常恼火和沮丧的。我曾经有一次比赛AC了6道题,然后被hack了一道,又FST了一道,最后还是没能打破4题魔咒。

当然了,你被别人hack你也可以hack别人,在某些比赛,你hack别人还可以加分,提高你的排名。因此好多专门搞竞赛的人说hack是codeforces比赛的精髓。

那么,codeforces这样的平台对找工作有用吗?我个人觉得,如果你是初学者,而且只有几个月时间了,那么刷codeforces没有什么意义,还是好好刷leetcode吧。

1,codeforces的题目大多数都不适合面试。

因为要用作竞赛嘛,codeforces的题目原创性都很高,不可能出一些众所周知的经典题目,肯定要改编绕个弯之类的,这一绕弯就大大提升了题目的难度了。

首先介绍一下力扣和codeforces的难度标记。 leetcode网站的难度是三个等级,easy, medium,hard。而codeforces的题目难度是分数表示的,如果强行对应的话,1000分以下对应着easy,1100-1500对应着medium,1600-1900对应着hard,2000分以上就基本不可能出现在面试里了,要不然没几个人做的出来。

有人呢可能会问了,说这些有什么用呢?因为,codeforces1300分以下的题目,或者比赛中A题和B题,都不会涉及到什么算法,纯粹就是脑筋急转弯。只要你脑瓜转过来了,会写简单的if else和循环之类的,基本都做出来。这样的题目,出现在面试里,没有任何意义,毕竟算法面试不是纯智商测试。

那涉及算法的题目呢?对不起,codeforces只要考算法,题目难度都不小,如果涉及两种以上算法,则巨难。比如程序员面试经常出现的搜索类,什么二分, BFS, DFS,记忆化搜索,codeforces只要考了,基本就要是1600分起步,相当于leetcode的hard。

想想你一个初学者,来到codeforces,简单的脑筋急转弯根本学不到任何东西,涉及算法的题目想半天做不出来,那是何等的打击人和浪费时间?还不如去leetcode,从易到难做针对性训练,把基础先打好。

当然,有些题目质量还是非常高的,比如1486D,给一个数组,要求找一个长度不小于k的子数组,使其中位数最大。这道题的解法非常巧妙,而且,如果把不小于k换成恰好等于k,就变成另一种解法了。这种反而适合作为hard难度题目出现在面试里。

而且leetcode虽然题目多,但是我觉得很多重要的算法还是没考察到,比如Dijkstra算法,这些在codeforces上都会有补充。大家如果学有余力可以在上面做补充训练。

2,codeforces是竞争性编程,和面试编程有很大区别。

竞争性编程的关键就是在最短的时间做对,而不是用最优的方法做出来。比如一道题,暴力做法O(N^2),二重循环搞定。而优化之后是O(NlgN),代码比较复杂。在竞赛中如果数据量只有1000的话,用优化的做法就是白白浪费时间的傻子行为,而在面试里,如果你本能给他写了一个暴力做法,面试官肯定不会满意,会追问,那暴力做法反而是在浪费宝贵的面试时间了。

另外,竞争编程下,很多人为了节省时间准备了一个模版库,需要用的时候直接调用,省时省力,久而久之模版实现的原理反而会忘掉,比如Dikstra算法,最小生成树算法等都是有现成的模版的。而在面试是不允许使用模版的,你要当着面把模块每行代码的实现原理讲清楚,代码还要写的规范易懂。因此好多在竞争性编程表现强势的人面试反而会翻车。

而且,codeforces会有很多特别的细节,比如大数取余,输入输出的调整。这些在面试是不会考察到的,leetcode输入输出是直接给你,面试的时候也是这样,但codeforces不是,你需要自己读取,而且使用python的同学,没错就是我,真的是深受其害啊。

比如在第690场的E题,给一个数组,找到所有的三元组,最大值最小值相差不超过k。这道题的输入对每组测试数据只要求所有数组长度和不超过20万。于是某些人给了这样一组数据,足足20万个testcase,每个testcase代表的数组只有1个数:1。这是我见过最恶心的hack,没有之一,因为这个hack只对python这种输入输出较慢的有用,让它在规定时间内读都读不完,但是没有任何的意义。最后我加上这样两行才解决问题

总之,竞争性编程你需要掌握一些“奇技淫巧”,这些不但对面试没有任何帮助,甚至有的还会起反作用。

不过呢,如果你距离找工作还早,想要好好训练思维,或者想要参加编程竞赛,比如OI,ACM之类的,codeforces是一个很好的平台。我在这个平台比了十几场赛,感觉在思维上有了质的飞跃,在leetcoce平台做题的速度也大大加快,easy题目4分钟就秒杀而且bug free,medium题目除部分难题外15分钟也够了,hard题目不再畏惧,周赛之前hard想都不敢想,现在也能半个小时做出来了。而且codeforces大神真的比leetcode多多了,那100个红名随便挑一个在leetcode都能横着走,现在我每次刷leetcode都感到自己很牛逼,然后一参加codeforces就被瞬间打脸。而且现在面试出题越来越灵活,未来的面试从codeforces上找题也不是没可能。

(鉴于评论区大神太多,我就不放自己codeforces账号截图了,太丢人)

最后,看到好多人都在质疑算法到底有没有用,毕竟工作中算法用的很少,什么二叉树根本不会用得到。我个人认为,这就跟高中学数学有没有用一个道理。算法是程序的灵魂,有了好的算法,程序才能高效运行。好多大神说算法用不到的,其实是因为他们已经烂熟于心,用的时候根本不知道自己在用了。或者有些根本用不到的算法,比如红黑树之类的,他们虽然用纸写不出来,但是一旦让他们上网,很快就能写出来。而如果你听信了他们那就惨了,有没有算法思想(不是具体某个算法),是区分程序员和程序民工的重要标志。

算法是程序的灵魂,思维则是算法的灵魂,这也是我刷codeforces的重要原因,就是两个字,思维。如果各位有跟我一起打codeforces的,欢迎私信我要二维码,我打算再创一个codeforces交流群。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3