#6480. C:桌子摆放 (Arrangement)
C:桌子摆放 (Arrangement)
题目 C:桌子摆放 (Arrangement)
| 属性 | 规格 |
|---|---|
| 输入文件 | input_*.txt |
| 输出文件 | output_*.txt |
| 时间限制 | 无限制(Output-only 任务) |
| 内存限制 | 无限制 |
| 分值 | 100 分 |
题目描述
Ravi 新建了许多家餐厅,需要你帮他以最优的方式在餐厅内摆放桌子。
- 餐厅模型:每个餐厅建模为一个 的网格。单元格分为三类:空地(
.)、障碍物(#)或门(D)。每个餐厅有且仅有一个门。 - 桌子类型:由若干相邻的 单元格组成。每家餐厅只能使用指定的几种桌子类型,但每种类型的使用次数不限。
- 摆放限制:
- 桌子只能放在空地上,且不能重叠。
- 桌子不能旋转或翻转,必须保持
tables.txt中给出的原始朝向。
- 可到达性要求:对于放置的每一张桌子,必须满足:
- 该桌子与门相邻;
- 或者存在一条路径,其起点与门相邻,终点与该桌子的任意单元格相邻。
- 路径定义:由一个或多个空地单元格组成的列表,且相邻单元格在网格中共享边。
- 评分目标:每个餐厅都有一个目标覆盖格数 。覆盖的有效单元格越多,得分越高。
输入格式
这是一个 Output-only(仅需提交输出) 任务。你需要从比赛网站下载 tests.zip(包含输入文件)和 tables.txt。
1. tables.txt 结构:
- 第一行:总共的桌子种类数。
- 随后每种桌子描述:
- 第一行:
a b c(类型编号 ,占用 行 列)。 - 随后 行:每行 个字符。
#代表桌子组成部分,.代表空位。
- 第一行:
2. input_*.txt 结构:
- 第一行:
N M C K(行、列、可用桌子种数、目标覆盖数)。 - 第二行:
C个整数,表示该餐厅允许使用的桌子类型编号。 - 随后 行: 个字符,描述餐厅布局(
.,#,D)。门D始终位于左边界。
输出格式
你需要为每个 input_x.txt 提交对应的 output_x.txt。
- 第一行:一个整数 ,表示放置的桌子总数。
- 随后 行:每行三个整数
type r c。type:桌子类型编号。r:垂直偏移量(距离顶部的行数,从 0 开始)。c:水平偏移量(距离左侧的列数,从 0 开始)。
计分规则
共有 8 个测试点,每个 12.5 分。
- 如果摆放不合法(重叠、越界、位置非空),该测试点得 0 分。
- 如果某张桌子不可达(无法从门通过空地到达),该桌子将被忽略,不计入覆盖总数 。
- 得分公式(基于 的比例):
注:如果 ,该公式确保你获得 100% 的分数。