ACM程序大赛的排名规则

最近公司举办了仿 ACM-ICPC 赛制的年度程序大赛,4小时内做4题(可能和 leetcode 周赛是相同赛制,未来得及考证)。 最终排名第7,没有得奖。发现我对"罚时"的理解一直不太准确,这里简单记录下新的理解。

旧的理解:

  • 先按做出题目的数量排名:做出题目数量越多,排名越靠前
  • 如果数量相同,则按照做出题目的总时间排名
    • 如果某题是一次性通过,则耗时为比赛开始到通过的时间;(或者是上一题通过 到 这次通过 的时间间隔?)
    • 如果某题是错了n次后才通过,则增加 n*20 分钟
    • 如果某题提交错误 n 次,但是始终没能通过,则没有罚时

其中 n*20 没有争议,是实打实的计入耗时中的;没有提交通过时,不计入罚时,这也好理解。 说说上面错误理解的地方:

  1. 正确提交消耗的时间,也叫做"罚时"。也就是说,对于某一题,即使没有错误的提交、只有一次正确的提交,那么它也产生"罚时"。
  2. 假设两只team最终做出的题目数量相同,并且都没有"错误的尝试",那么并不一定是最后提交通过的那个队伍,排名靠后。

为了说明第二点,举一个例子: A和B两个队伍都是做出3道题,并且每道题都是一次性通过。每道题的提交通过时间如下:

队伍 第1题 第2题 第三题
A 第10分钟 第30分钟 第60分钟
B 第5分钟 第10分钟 第80分钟

从最后一题(第三题)的提交时间来看,A队伍更早提交;按我之前的理解,A队伍更优秀,耗时更少,排名更靠前。

但实际上B队伍的排名要比A队伍靠前:

  • A队伍耗时结果为: 10 + (10+30) + (10+30+60) = 10+40+100=150 (分钟)
  • B队伍耗时结果为: 5 + (5+10) + (5+10+80) = 5+15+95 = 115 (分钟)

啥意思呢?隐藏的罚时规则:

  • 假设大家都是先提交简单题,再提交难题
  • 简单题花费的时间太多的话,即使难题比别人做的快,简单题的"慢"仍然带来惩罚

如果形式化表达下,可能更清晰:

  • A队伍: 做出题目的时间点分别为 t1+a, t2+a, t3+a
  • B队伍: 做出题目的时间点分别为 t1, t2, t3
    也就是:A队伍在做题目1时比B队伍多花费a分钟,A队伍在题目2和题目3的耗时和B队伍是完全相同。那么A队伍的总耗时是 t1+a + t2+a + t3+a = t1+t2+t3 + 3*a. 而B队伍的总耗时为 t1+t2+t3。

很明显,题目1上浪费的a分钟,虽然在物理时间维度上是a分钟,但是在ACM题目的规则下,逻辑时间是 a*m, 其中 m 是总共做出的题目数量。

而如果一个人脑回路发烧,先做难题再做简单题,会怎样呢?

假设三道题的耗时分别为 c1, c2, c3 分钟:

  • 先易后难:做出题目的时间点为 c1, c1+c2, c1+c2+c3。 总耗时为 c1*3+c2*2+c3=c1+c2+c3+(2*c1 + c2)
  • 先难后易:做出题目的时间点为 c3, c3+c2, c3+c2+c1。 总耗时为 c3*3 + c2*2 + c1=c1+c2+c3+(2*c3+c2)

显然,难题往往比简单题耗时更多,也就是 c1 < c2 < c3 总是成立的。那么先易后难的方式下,2*c1 显然小于 2*c3 , 耗时更少。

一个字:

一句话:既要又要

两句话:

  • 难题,通过的数量越多越好(废话)
  • 简单题,越快搞定越好;搞得越慢,后续每道通过的题上都产生额外惩罚

这个规则真的好吗? 真的健康吗? 我们把这个规则投射到实际生活中来:题目1->小学, 题目2->中学,题目3->大学。 我们假设小学最简单,中学中等难度,大学最难。 那么:

  • A君:小学读了7年,中学读了6年,大学读了3年;7+(7+6)+(7+6+3)=7+13+16=36
  • B君:小学读了5年,中学读了6年,大学读了5年; 5+(5+6)+(5+6+5)=5+11+16=32
  • C君: 小学6年,中学6年,大学4年:6+(6+6)+(6+6+4)=6+12+16=30

嗯,很奇怪的结果出现了:

  • 从发展轨迹看,A君天资愚钝,但是后天持续努力,大学提前修完学分,让人感受到"加速"和"精进",从完成学业的时间点来看,毕业时间持平了同龄人C;B君天资聪慧,但是大学沉迷游戏导致留级一年,最终也和同龄人C一起毕业。
  • 总大学阶段的状况看,A优秀,C普通,B较差
  • 但是总分上,C最好,B稍次,A则相差很远

这导致即使A君目前虽然水平远超B君和C君,仍然被判定低分。

这真的公平吗?假设A并不是天资愚钝,而是处于农村家庭和大山里,没有良好的教学条件,小学也并非花了7年而是"晚一年上学"; B则是家庭条件良好 + 父母运作提前1年上学;C则是普通家庭,按法律规定时间上学。显然 A 更优秀。


结论:个人认为现行的 ACM-ICPC 方式的罚时规则存在歧视,对简单题目的耗时惩罚不合理,应当随着提交通过的题目数量增多而惩罚程度衰减,而不是保持相同程度的惩罚。

相关推荐
GUIQU.11 分钟前
【每日一题 | 2025年6.2 ~ 6.8】第16届蓝桥杯部分偏简单题
算法·蓝桥杯·每日一题
weixin_527550401 小时前
初级程序员入门指南
javascript·python·算法
嘉陵妹妹3 小时前
深度优先算法学习
学习·算法·深度优先
GalaxyPokemon3 小时前
LeetCode - 53. 最大子数组和
算法·leetcode·职场和发展
hn小菜鸡4 小时前
LeetCode 1356.根据数字二进制下1的数目排序
数据结构·算法·leetcode
zhuiQiuMX4 小时前
分享今天做的力扣SQL题
sql·算法·leetcode
music&movie5 小时前
算法工程师认知水平要求总结
人工智能·算法
laocui16 小时前
Σ∆ 数字滤波
人工智能·算法
yzx9910136 小时前
Linux 系统中的算法技巧与性能优化
linux·算法·性能优化
全栈凯哥7 小时前
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
java·算法·leetcode·链表