Codeforces是什么 对找工作有没有用(3)
2023-03-16 来源:你乐谷
想想你一个初学者,来到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账号截图了,太丢人)
最后,看到好多人都在质疑算法到底有没有用,毕竟工作中算法用的很少,什么二叉树根本不会用得到。我个人认为,这就跟高中学数学有没有用一个道理。算法是程序的灵魂,有了好的算法,程序才能高效运行。好多大神说算法用不到的,其实是因为他们已经烂熟于心,用的时候根本不知道自己在用了。或者有些根本用不到的算法,比如红黑树之类的,他们虽然用纸写不出来,但是一旦让他们上网,很快就能写出来。而如果你听信了他们那就惨了,有没有算法思想(不是具体某个算法),是区分程序员和程序民工的重要标志。
当然,有些题目质量还是非常高的,比如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账号截图了,太丢人)
最后,看到好多人都在质疑算法到底有没有用,毕竟工作中算法用的很少,什么二叉树根本不会用得到。我个人认为,这就跟高中学数学有没有用一个道理。算法是程序的灵魂,有了好的算法,程序才能高效运行。好多大神说算法用不到的,其实是因为他们已经烂熟于心,用的时候根本不知道自己在用了。或者有些根本用不到的算法,比如红黑树之类的,他们虽然用纸写不出来,但是一旦让他们上网,很快就能写出来。而如果你听信了他们那就惨了,有没有算法思想(不是具体某个算法),是区分程序员和程序民工的重要标志。