跳到主要内容

AtCoder · AHC054

Treant’s Forest

在未揭示的格子上永久放置 Treant,在保持通往花朵路径的同时延缓确定性冒险者。

01

任务

每个 Case 是边长 20–40 的方形森林,包含入口、花朵、固定树木和一名冒险者。每次冒险者移动前,Policy 可以在尚未揭示的格子上永久放置 Treant。

一组放置会被原子执行,并且必须保证入口和冒险者当前位置都仍与花朵连通。随后冒险者揭示视线范围,并沿确定性最短路径前往私有目标。

02

Policy 接口

第一次 Observation 发布静态森林;后续 Observation 只发布变化中的公开状态,同一 Episode 内的 Policy 记忆可以保留地图和历史放置。

Observation 字段含义
turn当前回合索引
adventurer冒险者当前坐标
newly_revealed上一步移动新揭示的格子
revealed_cells / placed_treants公开的进度计数
initial尺寸、入口、花朵和固定树木;仅第一次 Observation

返回一组原子化放置。空集合表示不放置 Treant,直接让冒险者继续移动。

Action含义
{"placements": [[row, column], ...]}在合法、未揭示且为空的格子上放置互异的 Treant
{"placements": []}本回合不放置
03

评估

定义
Episode 计分合法冒险者移动次数,上限为 2,048
Benchmark 得分所有 Episode 计分的算术平均值
Policy failure计为 0
04

Feedback

Feedback 汇总所有评估 Case 的延迟、放置数量、终止结果、失败与 trace 覆盖。

字段含义
capped_mean_turns主要 Benchmark 得分
mean_placed_treants永久放置数量的平均值
flower_reached / turn_cap_reached终止结果计数
policy_failures失败 Episode 数量
trace.jsonl有界的语义 trace,包含公开 Observation、放置集合与终止结果。
05

使用 distribution

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

uv sync --project environments/atcoder/ahc054/treants_forest --extra dev
uv build environments/atcoder/ahc054/treants_forest

该 package 导出:

from treants_forest import TreantsForestBenchmark, baseline_program

benchmark = TreantsForestBenchmark()
program = baseline_program()