AT_ahc050_a [AHC050A] Gamble on Ice

题目描述

有一个由 $N \times N$ 个格子组成的溜冰场。左上角格子的坐标为 $(0,0)$,向下移动 $i$ 格、向右移动 $j$ 格的位置坐标为 $(i,j)$。$N \times N$ 格子的外部全部被岩石包围,无法进入。初始状态下,有 $M$ 个格子上放置了岩石。 你需要利用这个溜冰场和一个机器人进行如下游戏: - 游戏开始时,你的奖金为 $0$ 元。 - 首先,你需要声明一个由未被岩石占据的 $N^2-M$ 个格子按任意顺序排列的序列 $P=(P_0,P_1,\dots,P_{N^2-M-1})$。 - 接着,从未被岩石占据的格子中随机等概率选取一个,放置机器人。 - 然后,依次对 $i=0,1,\dots,N^2-M-1$ 执行以下操作: - 首先,机器人从上下左右四个方向中随机等概率选择一个方向。 - 然后,机器人沿该方向直线移动,直到撞到岩石为止。 - 注意,机器人有可能一个格子都不移动。 - 随后,在格子 $P_i$ 上放置岩石。 - 如果机器人正好在该格子上,机器人会被压扁,游戏结束。 - 如果机器人不在该格子上,你获得 $1$ 元奖金。 请你求出能使最终期望奖金尽可能大的序列 $P$。

输入格式

输入通过标准输入给出,格式如下: > $N$ $M$ > $S_{0,0}\ S_{0,1}\ \dots\ S_{0,N-1}$ > $\vdots$ > $S_{N-1,0}\ S_{N-1,1}\ \dots\ S_{N-1,N-1}$ - 所有测试点中,$N=40$。 - $M$ 是 $N^2/10$ 以上、$N^2/4$ 以下的整数。 - $S_{i,0}\ S_{i,1}\ \dots\ S_{i,N-1}$ 是由 `#.` 组成的 $N$ 个字符的字符串,$S_{i,j}$ 为 `#` 表示初始状态下格子 $(i,j)$ 上有岩石,为 `.` 表示初始状态下格子 $(i,j)$ 上没有岩石。

输出格式

你需要输出你求得的序列 $P$,其中 $P_i=(x_i,y_i)$,输出格式如下: > $x_0$ $y_0$ > $\vdots$ > $x_{N^2-M-1}$ $y_{N^2-M-1}$ 此时,序列 $P$ 必须满足以下约束: - 所有 $P_i$ 互不相同。 - 对所有 $P_i$,初始状态下格子 $P_i$ 上没有岩石。

说明/提示

### 得分 设最终获得的奖金期望为 $E$,则得分为 $\displaystyle {\rm round}\left(\frac{10^6 \times E}{N^2-M-1}\right)$。 共有 150 个测试用例,所有测试用例得分之和为你的提交得分。如果有一个及以上的测试用例输出不合法或超时,则整份提交判为 WA 或 TLE。比赛期间以最高得分计入最终排名,赛后不再进行系统测试。若多名参赛者得分相同,则排名并列。 ### 输入生成方法 - 首先,$N=40$。 - 然后,$M$ 从 $N^2/10$ 到 $N^2/4$ 的整数中等概率随机选取。 - 最后,从 $N^2$ 个格子中随机选取 $M$ 个不同的格子放置岩石,确定初始状态。 ### 工具(输入生成器与可视化器) - [网页版](https://img.atcoder.jp/ahc050/k1BmZE1o.html?lang=ja):比本地版更高性能,支持动画显示和手动游玩。 - [本地版](https://img.atcoder.jp/ahc050/k1BmZE1o.zip):需安装 [Rust 语言](https://www.rust-lang.org/ja) 编译环境。 - [Windows 版已编译二进制](https://img.atcoder.jp/ahc050/k1BmZE1o_windows.zip):不想配置 Rust 环境可直接使用。 比赛期间禁止分享可视化结果、解法或思路等相关内容,请注意遵守规则。 由 ChatGPT 4.1 翻译