朋友小陈去年还在写Excel表格汇总销售数据,今年已经在ACM区域赛现场敲代码调试了。他不是计算机系出身,本职是市场专员,靠每天通勤路上刷一道LeetCode题、周末啃一本《算法竞赛入门经典》,半年后就报名参加了校级程序设计竞赛——还拿了二等奖。
别被名字吓住,“程序设计竞赛”其实很实在
它不像听起来那么遥远:不是只比谁写的代码更炫酷,而是考你怎么用有限时间、有限资源,把一个具体问题快速、准确、高效地解决掉。比如给你一串杂乱的学生成绩,要求10秒内找出前3名且不重复;再比如模拟一个快递柜取件流程,判断哪些订单会超时、哪些格子该优先释放……这些场景,你写日报、做活动方案时其实天天在逻辑推演,只是没把它翻译成代码而已。
从哪开始?三样东西够用了
一台能上网的电脑、一个免费的在线判题平台(比如洛谷、Codeforces),再加上一本薄薄的《挑战程序设计竞赛》(绿书)——不用买最新款MacBook,旧笔记本装个VS Code也完全跑得动。
先挑最基础的“输入输出+循环”题练手感。比如这道经典入门题:
输入一个正整数n,输出1到n之间所有奇数的和。
样例输入:
5
样例输出:
9试着自己敲一遍,哪怕第一次运行报错、少了个分号、循环边界写错了,也没关系。判题系统会直接告诉你WA(答案错)、TLE(超时)还是RE(运行错误)——这种即时反馈,比老板改十遍PPT还干脆。
真实比赛什么样?
常见形式是3-5人组队,5小时,10道左右题目,共用一台电脑。有人负责读题拆逻辑,有人主敲,有人盯测试用例。去年某高校校赛有道题叫“奶茶排队优化”,背景就是学校后门那家永远排长队的喜茶:给定每杯制作时间、顾客到达间隔,求最小化所有人等待总时长。题面一出来,全场哄笑——因为大家刚喝完同一杯。
这种题不考背语法,考的是把生活问题“翻译”成计算模型的能力。你算过外卖骑手等红灯的平均时间吗?试过用贪心策略给宿舍6个人分水果,让每个人觉得最公平?这些,都是程序设计竞赛日常。
数码常识网的学习提升栏目里,我们不堆术语,不画大饼。想试试?今晚就打开洛谷,注册账号,搜“入门题单”,挑第一题提交。你写的不是代码,是你对这个世界多了一种拆解方式。