CF327D.Block Tower

普及/提高-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

After too much playing on paper, Iahub has switched to computer games. The game he plays is called "Block Towers". It is played in a rectangular grid with n rows and m columns (it contains n × m cells). The goal of the game is to build your own city. Some cells in the grid are big holes, where Iahub can't build any building. The rest of cells are empty. In some empty cell Iahub can build exactly one tower of two following types:

  1. Blue towers. Each has population limit equal to 100.
  2. Red towers. Each has population limit equal to 200. However, it can be built in some cell only if in that moment at least one of the neighbouring cells has a Blue Tower. Two cells are neighbours is they share a side.

Iahub is also allowed to destroy a building from any cell. He can do this operation as much as he wants. After destroying a building, the other buildings are not influenced, and the destroyed cell becomes empty (so Iahub can build a tower in this cell if needed, see the second example for such a case).

Iahub can convince as many population as he wants to come into his city. So he needs to configure his city to allow maximum population possible. Therefore he should find a sequence of operations that builds the city in an optimal way, so that total population limit is as large as possible.

He says he's the best at this game, but he doesn't have the optimal solution. Write a program that calculates the optimal one, to show him that he's not as good as he thinks.

在纸上玩了太多游戏后,Iahub 转而开始玩电脑游戏。他正在玩的游戏叫做“方块塔”(Block Towers)。该游戏在一个具有 nn 行和 mm 列的矩形网格(共含 n×mn \times m 个格子)中进行。游戏的目标是建造属于自己的城市。网格中某些格子是巨大的空洞,Iahub 无法在这些格子上建造任何建筑;其余格子均为空地。在某个空地上,Iahub 恰好可以建造一座以下两种类型的塔之一:

  1. 蓝色塔:每座蓝色塔的人口上限为 100100。
  2. 红色塔:每座红色塔的人口上限为 200200。然而,仅当当前时刻其至少一个相邻格子中已建有蓝色塔时,才允许在该格子上建造红色塔。两个格子被称为相邻,当且仅当它们共享一条边。

此外,Iahub 还可以随时摧毁任意格子上的建筑。该操作可执行任意多次。摧毁某座建筑后,其余建筑不受影响,且被摧毁的格子变为空地(因此 Iahub 在后续步骤中如有需要,仍可在该格子上重新建造塔;参见第二个样例中的此类情形)。

Iahub 可以吸引任意多的人口进入他的城市。因此,他需要将城市配置为能容纳尽可能多的人口。换言之,他应找出一个最优的操作序列来构建城市,使得总人口上限达到最大。

他声称自己是此游戏的最强玩家,但却并未找到最优解。请编写一个程序计算出最优解,以此证明他并没有自己想象得那么厉害。

输入格式

The first line of the input contains two integers n and m (1 ≤ n, m ≤ 500). Each of the next n lines contains m characters, describing the grid. The j-th character in the i-th line is '.' if you're allowed to build at the cell with coordinates (i, j) a tower (empty cell) or '#' if there is a big hole there.

输入的第一行包含两个整数 nn 和 mm(1 ≤ n, m ≤ 5001 ≤ n, m ≤ 500)。接下来的 nn 行,每行包含 mm 个字符,用于描述网格。第 ii 行中的第 jj 个字符为 . 表示可以在坐标为 (i, j)(i, j) 的格子上建造塔楼(空单元格),或为 # 表示该处有一个大洞。

输出格式

Print an integer k in the first line (0 ≤ k ≤ 106) — the number of operations Iahub should perform to obtain optimal result.

Each of the following k lines must contain a single operation in the following format:

  1. «B x y» (1 ≤ x ≤ n, 1 ≤ y ≤ m) — building a blue tower at the cell (x, y);
  2. «R x y» (1 ≤ x ≤ n, 1 ≤ y ≤ m) — building a red tower at the cell (x, y);
  3. «D x y» (1 ≤ x ≤ n, 1 ≤ y ≤ m) — destroying a tower at the cell (x, y).

If there are multiple solutions you can output any of them. Note, that you shouldn't minimize the number of operations.

第一行输出一个整数 kk(0 ≤ k ≤ 1060 \leq k \leq 10^6)—— Iahub 为获得最优结果所需执行的操作次数。

接下来的 kk 行中,每行必须包含一个操作,格式如下:

  1. B x y(1 ≤ x ≤ n1 \leq x \leq n, 1 ≤ y ≤ m1 \leq y \leq m)—— 在单元格 (x, y)(x, y) 处建造一座蓝色塔;
  2. R x y(1 ≤ x ≤ n1 \leq x \leq n, 1 ≤ y ≤ m1 \leq y \leq m)—— 在单元格 (x, y)(x, y) 处建造一座红色塔;
  3. D x y(1 ≤ x ≤ n1 \leq x \leq n, 1 ≤ y ≤ m1 \leq y \leq m)—— 拆除单元格 (x, y)(x, y) 处的一座塔。

若存在多个解,可输出其中任意一个。注意:你无需最小化操作次数。

输入输出样例

  • 输入#1

    2 3
    ..#
    .#.

    输出#1

    4
    B 1 1
    R 1 2
    R 2 1
    B 2 3
  • 输入#2

    1 3
    ...

    输出#2

    5
    B 1 1
    B 1 2
    R 1 3
    D 1 2
    R 1 2

输入解题思路,AI测评打分。不知道怎么写?

首页