什么是竞技编程(Competitive Programming)?
竞技编程的英文是 Competitive Programming,是指在限定时间内通过编写程序解决一系列算法问题的比赛形式。比较知名的赛事有 ACM-ICPC、Codeforces、Google Kick Start 等。这类比赛不仅考验选手的算法功底和编程技巧,还需要良好的思维敏捷性和代码调试能力。
比如我二十多年前在高中参加的 ICPC,就是一种典型的竞技编程。当时我们使用的编程语言还是 Turbo Pascal,比赛时间是三个小时,要解决四道题。那时候只要程序能输出正确的结果就行了,根本不太在意代码的实现方式和写得是否优雅。
我家娃在做 LeetCode 的一道算法题时,由于算法不够高效,有两三个测试用例出现了超时。他索性“投机取巧”地加了一个 if 判断,针对那些特定的输入直接返回正确结果。这样做在 LeetCode 上是可行的——前提是你知道测试数据,并能手动处理特殊情况。
但在实际的比赛中,这种做法往往行不通。一方面你无法提前知道测试输入;另一方面题目设计者也会故意防止这种“硬编码逃课”手法,所以比赛更要求通用、稳健的算法方案。这也是竞技编程和普通刷题平台之间的一个重要区别。
🏆 ACM-ICPC(国际大学生程序设计竞赛)
- 由 ACM 发起,目前由 ICPC Foundation 主办。
- 参赛形式:3 人一队,共用 1 台电脑,5 小时内解 8~12 道题。
- 强调团队合作和时间管理,适合大学生提升算法能力。
⚔️ Codeforces
- 俄罗斯创建的在线编程平台,面向全球。
- 参赛形式:个人赛,定期举办 Div.1~Div.4 不同难度的比赛。
- 每场比赛通常 1.5~2 小时,5~7 道题。
- 特色:Rating 排名系统活跃,题库丰富,适合刷题练习。
🚀 Google Kick Start(已停办)
- 由 Google 举办的全球编程挑战赛,于 2023 年正式停办。
- 参赛形式:个人赛,3 小时内完成 3~4 道题。
- 题目偏实际工程,适合求职 Google 的程序员参与。
- 推荐转向参与 Kaggle 或 Code Jam Archive 等替代平台。
为什么竞技编程的边际效应较低?
在实际工作中,竞技编程中使用的许多技巧和套路并不常用。工程开发更注重系统设计、代码可读性、协作能力以及对业务的理解。而竞技编程更偏向于解谜式的快速编码,在真实项目中的应用场景相对有限。
不过,对于初学者来说,像 LeetCode(力扣)这样的平台就非常友好。相比 Codeforces 或 Google Kick Start 这类比赛,LeetCode 不需要自己处理输入输出,而是直接提供处理好输入的函数,只需要专注于函数逻辑的实现,非常适合用来学习算法和数据结构。
我在教孩子编程时,首选的就是 LeetCode。虽然对那些在 TopCoder 上驰骋的高手来说可能过于简单,但我认为刷 LeetCode 是一个非常好的学习方式。相比 Scratch 这种图形化编程平台,LeetCode 的挑战更实际;而相比直接开发一个完整软件项目,它的学习曲线更平滑。更重要的是,提交通过(AC)后获得的成就感,也能有效激发学习兴趣。
而像 Codeforces 这样的比赛,解题通常需要先仔细阅读题目、理解题意,再思考合适的算法,最后编写并调试代码,整个过程往往非常耗时。
竞技编程的边际效应递减(虽然和力扣一样都能提高Problem-solving的能力):
- 实际工作中问题类型不同: 竞技编程专注算法解题,现实开发更注重系统设计、协作与工程实现。
- 代码质量要求不同: 比赛只求输出正确,而工作中更注重代码可读性、可维护性和规范。
- 比赛技巧在工作中不常用: 很多解题技巧如位运算优化、模板构造等,在实际项目中较少直接应用。
- 学习投入与产出比例下降: 初期刷题收益高,但长期持续投入带来的提升逐渐变小。
学编程最好的方法就是把敲/抄代码。
刷题:程序员的基本技能
刷题是提高编程能力和算法思维的有效方式。- 延时满足: 带娃刷题第365天
- 竞技编程的边际效应递减
- 力扣刷题打卡2209天竟然断了, 哎
- 娃开始每天都在刷力扣, 他长大以后想当软件工程师
- 力扣 Leetcode 的刷题利器: 在线调试器和自动代码提示完成
- 在LG的OLED智能电视下刷题/力扣
- 面试刷题更像是一种服从性测试
- 力扣刷题2000天
- 力扣刷题获得一件衣服奖励(Leetcode DCC Winner)
- 和媳妇约会影响我刷题的速度
- 第一次在动车上刷题: 国内的火车又快又舒服又便宜
- C++ 刷题坑: 二分查找也没有那么容易写出来
- 周末刷刷题找回ACM-er 的感觉
- 找一个 IPAD 9.7能刷题的蓝牙键盘不容易
- 程序员能刷题的网站和资源(我的刷题经验之谈)
- 时间碎片用来刷题是再好不过的了
- 熟能生巧 - 刷题的一些技巧的经验之谈
- 体验 Google Kickstart 刷题
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK