跳到主要内容

AtCoder · AHC057

Molecules

在环面上为运动点安排连接,并以尽可能低的距离成本形成十个等规模分量。

01

任务

每个 Case 从 100,000 × 100,000 环面上的 300 个独立运动点开始。Policy 可以在每次同步移动阶段前添加连接。

连接必须合并两个不同的连通分量,其成本为取整后的环面距离,并通过动量守恒合并分量速度。第 1,000 回合结束时,图必须恰好包含十个各有 30 个点的分量。

02

Policy 接口

每次 Observation 都包含完整的公开运动系统;第一次 Observation 还包含固定任务常量。

Observation 字段含义
turn / turns_remaining当前时间状态
positions300 × 2 的点位置
velocities300 × 2 的分量速度
components / component_count规范化分量标签与当前数量
total_cost / initial累计成本与仅首次出现的任务常量

将当前回合的全部连接作为一个原子集合返回。空集合表示不连接并推进点系统。

Action含义
{"bonds": [[point_i, point_j], ...]}连接当前不同分量中的点对
{"bonds": []}不连接并推进
03

评估

定义
完成条件1,000 回合后恰好形成 10 个各含 30 点的分量
Benchmark 得分官方对数距离成本得分的平均值
Policy failure计为 0
04

Feedback

Feedback 报告得分、总连接成本、完成情况、失败与有界连接事件覆盖。

字段含义
mean_log_cost_score主要 Benchmark 得分
mean_total_cost已完成解的平均连接成本
completed / policy_failuresEpisode 结果计数
bond_events / bond_events_omitted已发布与省略的 trace 事件数
trace.jsonl初始公开点状态,以及有界的连接事件与后续分量状态序列。
05

使用 distribution

从仓库根目录构建这个可独立安装的叶子 project:

uv sync --project environments/atcoder/ahc057/molecules --extra dev
uv build environments/atcoder/ahc057/molecules

该 package 导出:

from molecules import MoleculesBenchmark, baseline_program

benchmark = MoleculesBenchmark()
program = baseline_program()