ACM程序大赛的排名规则

news2024/12/20 10:09:47

最近公司举办了仿 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 方式的罚时规则存在歧视,对简单题目的耗时惩罚不合理,应当随着提交通过的题目数量增多而惩罚程度衰减,而不是保持相同程度的惩罚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

江协科技 OLED库 OLED_Print( )函数自动换行

void OLED_Printf(int16_t X, int16_t Y, uint8_t FontSize, char *format, ...) {char String[256]; //定义字符数组va_list arg; //定义可变参数列表数据类型的变量argva_start(arg, format); //从format开始&#xff0c;接收参数列表到arg变量vsprintf(Strin…

探索 Seaborn Palette 的奥秘:为数据可视化增色添彩

一、引言 在数据科学的世界里&#xff0c;视觉传达是不可或缺的一环。一个好的数据可视化不仅能传递信息&#xff0c;还能引发共鸣。Seaborn 是 Python 中一款广受欢迎的可视化库&#xff0c;而它的调色板&#xff08;palette&#xff09;功能&#xff0c;则为我们提供了调配绚…

领域驱动设计的学习分享

DDD 是什么 领域驱动设计(Domain Driven Design) 是一种从系统分析到软件建模的一套方法论。以领域为核心驱动力的设计体系。 为什么使用 面向对象设计&#xff0c;数据行为绑定&#xff0c;告别贫血模型优先考虑领域模型&#xff0c;而不是切割数据和行为准确传达业务规则…

Three.js推荐-可以和Three.js结合的动画库

在 Three.js 中&#xff0c;3D 模型、相机、光照等对象的变换&#xff08;如位置、旋转、缩放&#xff09;通常需要通过动画进行控制&#xff0c;以实现更加生动和富有表现力的效果。然而&#xff0c;Three.js 本身并没有内置的强大动画管理系统&#xff0c;尽管可以通过关键帧…

vue+springboot+cas配置及cookie传递问题

cookie的注意事项 前边的文章已经介绍过cookie的基本信息&#xff0c;这里再次说明一点&#xff1a;cookie是无法进行跨域传递的&#xff0c;很多时候cookie无法设置和传递都是因为跨域问题&#xff0c;ip/端口不一致。 主要就是&#xff1a;被设置cookie和要传递cookie的地址…

Mac升级macOS 15 Sequoia后,无法ssh连接本地虚拟机

现象 macOS 15后&#xff0c;无法ssh连接本地启动的虚拟机&#xff0c;提示错误&#xff1a; No route to host&#xff0c;也ping不通。包括UTM、Parallels Desktop这两个虚拟机软件。之前都是没问题的&#xff0c;通过一些简单排查&#xff0c;目前没发现什么问题。 在虚拟…

使用 NVIDIA DALI 计算视频的光流

引言 光流&#xff08;Optical Flow&#xff09;是计算机视觉中的一种技术&#xff0c;主要用于估计视频中连续帧之间的运动信息。它通过分析像素在时间维度上的移动来预测运动场&#xff0c;广泛应用于目标跟踪、动作识别、视频稳定等领域。 光流的计算传统上依赖 CPU 或 GP…

c语言----顺序结构

顺序结构的基本概念 定义&#xff1a;顺序结构是C语言程序中最基本的结构&#xff0c;它按照语句的先后顺序依次执行。就像我们日常做事一样&#xff0c;一步一步地按照顺序来完成任务。在C语言程序中&#xff0c;从程序的第一条语句开始&#xff0c;逐句向下执行&#xff0c;…

基于base32的兑换码算法(思路)

base32编码指的是基于32个可打印字符对任意字节数据进行编码&#xff1a;大写字母A-Z以及数字2-7。 兑换码要求:长度为10个字符 如果将这32个字符依次放到一个base数组中&#xff0c;那么最大的下标就是31。我们将要编码的任意字节数据按照五个bit为一组进行划分&#xff0c;…

python学opencv|读取图像(十六)修改HSV图像HSV值

【1】引言 前序学习进程中&#xff0c;我们已经掌握了对HSV通道和BGR通道的拆分和合并&#xff0c;并通过自由组合的形式&#xff0c;获得了和初始图像完全不一样的新图像&#xff0c;相关文章可以参考下述链接&#xff1a; python学opencv|读取图像&#xff08;十四&#xf…

用QT制作的倒计时软件

一、pro代码 RC_ICONS countdown.ico 二、mainwindow.cpp代码 #include "mainwindow.h" #include "ui_mainwindow.h"#include <QDateTime> #include <QMessageBox> #include <QSettings>MainWindow::MainWindow(QWidget *parent): QM…

VScode MAC按任意键关闭终端 想要访问桌面文件

说明 最近配置MAC上CPP的运行环境&#xff0c;在安装必要的CPP插件后&#xff0c;配置launch和task等json文件后&#xff0c;点击运行三角形&#xff0c;每次都会跳出main想要访问桌面上的文件。并且输出也是在调试控制台&#xff0c;非常逆天。 尝试 尝试1:尽管我尝试将ta…

【一本通】线段

【一本通】线段 C语言代码Java代码C代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 数轴上有 n条线段&#xff0c;选取其中 k条线段使得这 k条线段两两没有重合部分&#xff0c;问最大的k为多少? 输入 输入文件segment.in的第一行为…

学习日志024--opencv中处理轮廓的函数

目录 前言​​​​​​​ 一、 梯度处理的sobel算子函数 功能 参数 返回值 代码演示 二、梯度处理拉普拉斯算子 功能 参数 返回值 代码演示 三、Canny算子 功能 参数 返回值 代码演示 四、findContours函数与drawContours函数 功能 参数 返回值 代码演示 …

关于分页的样式问题

在最近写网页的时候遇到了一个关于样式的问题&#xff0c;今天我来跟大家来说一下。像是分页中的颜色效果&#xff0c;斑马纹颜色要注意颜色不要过于深。 这种的颜色就有一点深看着很不舒服&#xff0c;应将当前的颜色改为淡一点的&#xff0c;也可以利用rgba调整透明度&#x…

机器学习周报(12.9-12.15)

文章目录 摘要Abstract 1 Swin Transformer1.1 输入1.2 Patch Partition1.3 Linear Embedding1.4 Patch Merging1.5 Swin Transformer Block1.6 代码总结 摘要 本篇博客介绍了采用类似于卷积核的移动窗口进行图像特征提取的Swin Transformer网络模型&#xff0c;这是一种基于T…

基于Spring Boot的校园车辆管理系统

一、系统背景与意义 随着校园规模的不断扩大和车辆数量的增加&#xff0c;传统的车辆管理方式已经难以满足高效、准确管理车辆的需求。因此&#xff0c;开发一个基于Spring Boot的校园车辆管理系统具有重要的现实意义。该系统可以实现对校园车辆的信息化管理&#xff0c;提高车…

SpringBoot3整合FastJSON2如何配置configureMessageConverters

在 Spring Boot 3 中整合 FastJSON 2 主要涉及到以下几个步骤&#xff0c;包括添加依赖、配置 FastJSON 作为 JSON 处理器等。下面是详细的步骤&#xff1a; 1. 添加依赖 首先&#xff0c;你需要在你的 pom.xml 文件中添加 FastJSON 2 的依赖。以下是 Maven 依赖的示例&#…

隐私清理工具Goversoft Privazer

PrivaZer 是一款专为隐私保护而生的 Windows 系统清理工具&#xff0c;支持深度扫描、清除无用文件和隐私痕迹。 PrivaZer - 深度扫描磁盘&#xff0c;自动清理上网痕迹&#xff0c;全面保护 Windows 的网络隐私 释放磁盘空间 硬盘空间告急&#xff0c;想清理却又无从下手&…

UDP网络编程套接

目录 本文核心 预备知识 1.端口号 认识TCP协议 认识UDP协议 网络字节序 socket编程接口 sockaddr结构 UDP套接字编程 服务端 客户端 TCP与UDP传输的区别 可靠性&#xff1a; 传输方式&#xff1a; 用途&#xff1a; 头部开销&#xff1a; 速度&#xff1a; li…