当你想到计算机程序员时,你可能会想到一个孤独的程序员,坐在小隔间里,沐浴在闪烁的光线中。但你应该想象一个团队——在麻省理工学院的例子中,一个欢乐、胜利的团队,由竞争激烈的学生程序员组成,致力于比竞争对手更快、更准确地解决难以置信的棘手问题。该团队最近在国际大学编程大赛(ICPC)的北美锦标赛中排名第一,这意味着他们现在有资格参加明年的第46届年度ICPC世界总决赛。
在这里,团队的三位成员——计算机科学和工程大三学生钟子倩和邓明阳,以及数学和计算机科学和工程大四学生Anton Trygub——描述了在顶级计算机领域的竞争是什么样子的。
问:我们的许多读者可能从未见过编程比赛。告诉我们一些基本的规则:你面临什么样的问题,你有多少时间准备或解决它们,以及你被允许使用的工具。
钟:我们通常要在5个小时内处理10到15个问题。您可以使用Java、Kotlin、Python和C/ c++进行编码。大多数团队,包括我们,更喜欢使用c++,因为它非常简洁,通常运行得更快。
邓:在ACM-ICPC比赛中,一个团队由三个成员组成,而只有一台计算机可用,所以平均每个成员只有三分之一的计算机访问权限。此外,编程竞赛中的问题通常需要实现有效的算法和数据结构,所以我们通常在编码之前花大量时间思考解决方案。
问:你通常了解你的竞争对手吗,或者在对方球队有朋友吗?编程比赛中有垃圾话吗?换句话说,社会氛围怎么样?
钟:我之前就认识一些竞争对手,整个社会氛围都很冷很友好。我们一起玩扑克和各种各样的纸牌游戏;最后我学会了两种新的纸牌游戏!我想在这里讲垃圾话不太受欢迎。
邓:我同意。我和许多竞争对手交朋友,他们都很好。这里的人们有着共同的兴趣和相似的背景。感觉就像一个社区。所以没有必要在比赛之外竞争。
Trygub:竞技性编程不同于其他竞技性活动,因为你不会像在足球、国际象棋等游戏中那样直接与某人竞争。你只需要尽你所能做好,这样团队之间就不会紧张。在更高的层次上,竞争对手彼此了解,因为我们定期参加相同的比赛。我们在这里结交朋友,帮助ICPC社区发展!
问:在你看来,是什么让一个问题特别难解决?在北美锦标赛中,哪个问题是最难解决的?
钟:为了解决一个问题,我们思考和编码。有些问题很难编码,因为有很多混乱的细节和案例很难正确处理。对于其他一些问题,很难找到正确的解决方案。就我个人而言,我讨厌前一类问题(这又不是打字比赛!),而后一类问题更受欢迎。H问题可能是最难的一个,我们是唯一解决它的团队。
Trygub:这个问题可能因为不同的原因而变得困难:它可能只是繁重的执行而很少思考,或者需要一些知识,如果没有这些知识,你可能会放弃,或者有很多混乱的细节。我更喜欢那些困难在于思考部分的问题,一些创造性的问题。阅读问题陈述并感受“这怎么可能解决呢?”
问:告诉我一个你觉得特别有创意的解决方案,或者一个你引以为豪的解决方案。
邓:我觉得安东对H问题的解决方案和子茜对D问题的解决方案都很有创意。
Trygub:我不认为我的解决方案有什么特别的创造性,但是H问题解决起来很有趣。设置是,“这怎么可能被解决?,然后你开始观察一些情况,注意到一些观察结果,它们突然加起来就是完整的解决方案。
钟:D题的细节我不记得了,但我记得这是一个相当简单的问题,需要一些计算技巧!
问:你将如何为明年的世界决赛做准备?
钟:我想我们会一起多做一些训练比赛。没有什么秘方。主要就是多练习。
邓:我们会多练习,在练习的过程中我们会完善我们的策略。
特里古布:在这一点上,我们必须多听教练的话!不过主要是练习。
问:在过去的几年里,来自中国、俄罗斯和波兰的队伍在世界决赛中占据了特别的优势。为什么呢?从你的角度看,是不是不同的国家有不同的备战和比赛方式?
钟:我觉得俄罗斯和波兰的很多球队训练都很刻苦,他们的策略也很好。我听说来自莫斯科国立大学的红小熊猫团队喜欢从难的问题开始,把一些容易的问题留到最后一小时。这并不是最优的,惩罚(你花在解决所有问题上的时间越长,惩罚就越大),但它可能更好地利用了最后一个小时(最后一个小时通常是非常有压力的,很难把事情做好)。这和我们通常追求的很不一样。
特里古布:我不认为我们应该在这里谈论某种趋势,来自那些国家的选手碰巧非常强大,几次进入了世界决赛。我希望我们能在决赛中带来一点北美的优势!
问:作为一名程序员,能告诉我像这样的比赛教会了你什么吗?
钟:我认为这有助于我更快更准确地编码。在竞赛中,一旦出现问题,你就没有太多时间去调试。
Trygub:它帮助我寻找最有效的方法来实现某些东西,同时保持它的整洁,否则我会死于调试。
邓:这也提高了我的协作能力。在这样的比赛中,你必须与你的队友沟通,清楚地表达你的想法,团队合作,相互信任。
注:本文由院校官方新闻直译,仅供参考,不代表指南者留学态度观点。