QOJ.ac

QOJ

Time Limit: 1.0 s Memory Limit: 256 MB Total points: 100 Hackable ✓

#16573. 龙的进攻

Statistics

龙 Evirir 再次对 MCO 国发动了攻击。为了抵御 Evirir 的进攻,MCO 国的居民准备了配备穿透龙鳞弹药的防空炮。

MCO 国可以被建模为一个 $n \times m$ 的网格,行从上到下编号为 $1$ 到 $n$,列从左到右编号为 $1$ 到 $m$。第 $i$ 行第 $j$ 列的格子记为 $(i, j)$。每个格子中都有一门防空炮。为了更好地击落 Evirir,这些防空炮会随着它在 MCO 国上空飞行而移动。

MCO 国前总统 Duckmoon 会向居民发布 $T$ 条指令,指示他们移动防空炮。这些指令由一个长度为 $T$ 的字符串 $S$ 表示,其中只包含字符 NSEW。在第 $i$ 条指令(即 $S_i$)执行时,所有防空炮按如下方式移动:

  • 若 $S_i = N$,防空炮向北移动。位于 $(i, j)$ 的防空炮在 $i > 1$ 时移动到 $(i - 1, j)$;否则保持不动。
  • 若 $S_i = S$,防空炮向南移动。位于 $(i, j)$ 的防空炮在 $i < n$ 时移动到 $(i + 1, j)$;否则保持不动。
  • 若 $S_i = E$,防空炮向东移动。位于 $(i, j)$ 的防空炮在 $j < m$ 时移动到 $(i, j + 1)$;否则保持不动。
  • 若 $S_i = W$,防空炮向西移动。位于 $(i, j)$ 的防空炮在 $j > 1$ 时移动到 $(i, j - 1)$;否则保持不动。

注意,一个格子中可以同时存在多门防空炮。

当 Evirir 被击落后,MCO 国居民需要收回所有防空炮。对于每一对 $(i, j)$($1 \le i \le n$,$1 \le j \le m$),居民想知道最初位于 $(i, j)$ 的防空炮在执行完全部 $T$ 条指令后最终会停留在哪个格子。

每门防空炮的最终位置用一个整数表示。若某门防空炮最终位于 $(x, y)$,则其对应的整数为 $(x - 1) \times m + (y - 1)$。

输入格式

第一行包含三个以空格分隔的整数 $n$、$m$ 和 $T$,分别表示行数、列数以及 Duckmoon 发布的指令数。保证 $1 \le n, m, T \le 10^6$ 且 $nm \le 10^6$。

第二行包含一个长度为 $T$ 的字符串 $S$,由字符 NSEW 组成。

输出格式

设 $(x_{i,j}, y_{i,j})$ 表示最初位于 $(i, j)$ 的防空炮最终到达的格子。

输出 $n$ 行。第 $i$ 行输出 $m$ 个以空格分隔的整数 $q_{i,1}, q_{i,2}, \dots, q_{i,m}$,其中:

$q_{i,j} = (x_{i,j} - 1) \times m + (y_{i,j} - 1)$。

子任务

  • 子任务 1(10 分):$nmT \le 10^6$
  • 子任务 2(22 分):$n = 1$
  • 子任务 3(23 分):$S$ 仅包含字符 NE
  • 子任务 4(45 分):无额外限制

样例数据

输入

3 4 5
NEESW

输出

5 6 6 6
5 6 6 6
9 10 10 10

输入

7 5 20
WSSWNSENSNWENESSNSEW

输出

12 12 12 13 13
17 17 17 18 18
22 22 22 23 23
27 27 27 28 28
32 32 32 33 33
32 32 32 33 33
32 32 32 33 33

说明

下面是样例 1 的示意图,展示了最初每门防空炮的位置以及它们根据指令移动的过程。

初始状态:

第1列 第2列 第3列 第4列
第1行 (1,1) (1,2) (1,3) (1,4)
第2行 (2,1) (2,2) (2,3) (2,4)
第3行 (3,1) (3,2) (3,3) (3,4)

执行指令 N 后,向北移动。

执行指令 E 后,向东移动。

再次执行指令 E 后,再次向东移动。

执行指令 S 后,向南移动。

执行指令 W 后,向西移动。

最终,原本位于 $(1,1)$ 的防空炮停在 $(2,2)$,对应的整数为 $1 \times 4 + 1 = 5$。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.