AT_pakencamp_2019_day3_h パ研王国を守れ!

题目描述

帕研战争终于打响了! 战场可以用一个 $N \times N$ 的网格表示。网格中的每个格子用 $(i, j)$ 来标识,表示这是第 $i$ 行、第 $j$ 列的格子。 在这个战场上有 $M$ 名帕研王国的士兵和 $M$ 名敌国的士兵。具体情况如下:如果格子 $S_{i,j}$ 是 `X`,表示那里有帕研王国的士兵;如果是 `Q`,则表示有敌国的士兵;若是 `.`,则表示格子是空的。 敌国的士兵可以朝八个方向射击:上下左右以及对角线方向。(如下图所示) ![ ](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_pakencamp_2019_day3_h/646175afd31e805db1e3169a4fa3b09ea9247119.png) 为了阻止敌国士兵直接射击到帕研王国的士兵,我们计划在一些空格上放置障碍物。放置障碍物的条件是: - 格子上必须没有帕研王国的士兵或敌国的士兵,并且该格子是空的。 请尽可能使用最少的障碍物,保证敌国的士兵无法直接射击到帕研王国的任何士兵。 需注意的是,放置多少个障碍物会影响得分,所以不需要完全做到使用最少的障碍物。

输入格式

输入通过标准输入给出: > $N$ $M$ > $S_{1, 1}\ S_{1, 2}\ S_{1, 3}\ \cdots\ S_{1, N}$ > $S_{2, 1}\ S_{2, 2}\ S_{2, 3}\ \cdots\ S_{2, N}$ > $\vdots$ > $S_{N, 1}\ S_{N, 2}\ S_{N, 3}\ \cdots\ S_{N, N}$

输出格式

输出中每个格子 $(i, j)$ 的状态用 $V_{i, j}$ 表示,具体规则如下: - 如果格子 $(i, j)$ 上没有放置障碍物,令 $V_{i, j} = S_{i, j}$ - 如果该格子上放置了障碍物,则 $V_{i, j} = \texttt{\#}$ 请按照以下格式输出: > $V_{1, 1}\ V_{1, 2}\ V_{1, 3}\ \cdots\ V_{1, N}$ > $V_{2, 1}\ V_{2, 2}\ V_{2, 3}\ \cdots\ V_{2, N}$ > $\vdots$ > $V_{N, 1}\ V_{N, 2}\ V_{N, 3}\ \cdots\ V_{N, N}$

说明/提示

### 约束 所有输入数据需满足以下条件: - $N = 100$ - $M = 300$ - $S_{i, j}$ 可以是 `Q`,`X` 或 `.` 中之一 - 格子中有且只有 $M$ 个 `Q` - 格子中有且只有 $M$ 个 `X` ### 测试数据生成说明 帕研王国和敌国士兵的位置被设置为“帕研王国与敌国士兵不会相邻”的条件下生成,基本是随机的。具体的生成代码可以查看[这里](https://img.atcoder.jp/pakencamp-2019-day3/0c92256d19fa24d950ffeb3756ba9876.zip)。 ### 得分规则 提交的得分计算如下: - 对于20个测试用例,如果有任意一个结果不满足条件(格式错误或敌国士兵可直接攻击帕研王国士兵),则得分为0。 - 否则,第 $i$ 个测试用例得分为 $a_i$,总得分为 $\lfloor \frac{a_1 + a_2 + \cdots + a_{20}}{20} \rfloor$。 每个测试用例得分基于障碍物数量 $L$ 计算: - 当 $2401 \leq L$ 时,得5分。 - 当 $1901 \leq L \leq 2400$ 时,得14分。 - 当 $1501 \leq L \leq 1900$ 时,得17分。 - 当 $1201 \leq L \leq 1500$ 时,得20分。 - 当 $1001 \leq L \leq 1200$ 时,得23分。 - 当 $481 \leq L \leq 1000$ 时,得 $50 - (L - 480) \times 0.05$ 分。 - 当 $431 \leq L \leq 480$ 时,得 $100 - (L - 430) \times 1$ 分。 - 当 $L \leq 430$ 时,得100分。 ![ ](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_pakencamp_2019_day3_h/559e4fd8e17d3217576d81c94dff275d5515ab9a.png) ### 输入输出示例 例如,以下输入示例考虑的是: ``` 7 3 .Q..... ....X.. ....... .X....Q ....... Q.....X ....... ``` 对于这个输入例子,如果不放置障碍物,战场会像下图这样: ![ ](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_pakencamp_2019_day3_h/c949522c0df3f8fee7fbb0f17c3684e28a1f1d0c.png) 这是一个正确的输出示例,使用了6个障碍物(对应图A): ``` .Q..... .#..X.. ...#.#. .X..#.Q ......# Q..#..X ....... ``` 而下面的输出是不正确的,因为第 $(1, 2)$ 位上的敌国士兵可以射击到第 $(4, 2)$ 位的帕研王国士兵。 ``` .Q..... ....X.. ....##. .X..##Q ####### Q...##X ....##. ``` ![ ](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_pakencamp_2019_day3_h/bdc4cd3e02e5f198bcd8718a7988d9989ac5a9fb.png) 需要注意的是,上述例子不符合 $N = 100$ 和 $M = 300$ 的条件,因此不在评分范围内。所有用于测试的数据中都满足 $N = 100$,$M = 300$。 **本翻译由 AI 自动生成**