D. 扫地机器人

    传统题 文件IO:robot 1000ms 512MiB

扫地机器人

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

本题使用文件输入输出:输入文件名为 robot.in,输出文件名为 robot.out。

一个房间是 nn 行 mm 列的网格,行从上到下编号 1∼n1 \sim n,列从左到右编号 1∼m1 \sim m。每个格子要么是空地 .,要么是障碍 #。

一台扫地机器人开始时停在第 xx 行第 yy 列的空地上,面朝四个方向(上、下、左、右)之一。机器人工作 kk 个单位时间,每个单位时间它做且只做下面一件事:

  • 看一眼正前方的那个格子。如果它在房间内且是空地,机器人就前进一格到那里;
  • 否则(正前方出了房间,或者是障碍),机器人原地向右转 90∘90^\circ(上 → 右 → 下 → 左 → 上),这个单位时间内不移动。

机器人到过的每个格子(包括出发的格子)都会被打扫干净。请你求出 kk 个单位时间结束后,一共有多少个不同的格子被打扫过。

输入格式

输入文件名为 robot.in。

第一行三个整数 n,m,kn, m, k,表示房间的行数、列数和工作的单位时间数。

第二行两个整数和一个大写字母 x,y,cx, y, c,表示机器人的起始行、起始列和起始朝向。cc 是 U、D、L、R 之一,分别表示朝上(行号减小的方向)、朝下、朝左(列号减小的方向)、朝右。

接下来 nn 行,每行一个长度为 mm 的字符串,只含 . 和 #,描述房间。保证第 xx 行第 yy 列是空地。

输出格式

输出文件名为 robot.out。

一行一个整数,表示被打扫过的不同格子的数量。

样例 #1

样例输入 #1

3 4 12
1 1 R
..#.
....
....

样例输出 #1

6

样例解释

机器人从 (1,1)(1,1) 朝右出发,1212 个单位时间依次是:

时间 正前方 动作 结束时位置 / 朝向
1 (1,2)(1,2) 空地 前进 (1,2)(1,2) 朝右
2 (1,3)(1,3) 障碍 右转 (1,2)(1,2) 朝下
3 (2,2)(2,2) 空地 前进 (2,2)(2,2) 朝下
4 (3,2)(3,2) 空地 (3,2)(3,2) 朝下
5 (4,2)(4,2) 出界 右转 (3,2)(3,2) 朝左
6 (3,1)(3,1) 空地 前进 (3,1)(3,1) 朝左
7 (3,0)(3,0) 出界 右转 (3,1)(3,1) 朝上
8 (2,1)(2,1) 空地 前进 (2,1)(2,1) 朝上
9 (1,1)(1,1) 空地 (1,1)(1,1) 朝上
10 (0,1)(0,1) 出界 右转 (1,1)(1,1) 朝右
11 (1,2)(1,2) 空地 前进 (1,2)(1,2) 朝右
12 (1,3)(1,3) 障碍 右转 (1,2)(1,2) 朝下

到过的格子有 (1,1),(1,2),(2,2),(3,2),(3,1),(2,1)(1,1),(1,2),(2,2),(3,2),(3,1),(2,1) 共 66 个。第 99、1111 个单位时间回到了已经打扫过的格子,不重复计数。

样例 #2

样例输入 #2

2 2 5
1 1 U
.#
#.

样例输出 #2

1

样例解释

机器人四面都走不通,55 个单位时间全在原地转圈,只有出发的格子被打扫过。

样例 #3

样例输入 #3

见附件中的 robot/robot3.in。

样例输出 #3

见附件中的 robot/robot3.ans。

提示

数据范围

  • 对于 30%30\% 的数据:n,m≤10n, m \le 10,k≤100k \le 100;
  • 对于 60%60\% 的数据:n,m≤100n, m \le 100,k≤104k \le 10^4;
  • 对于 100%100\% 的数据:1≤n,m≤10001 \le n, m \le 1000,1≤k≤1061 \le k \le 10^6,1≤x≤n1 \le x \le n,1≤y≤m1 \le y \le m。

附件

CSP模拟赛-Level A

未参加
状态
已结束
规则
OI
题目
6
开始于
2026-10-7 19:45
结束于
2026-10-16 3:45
持续时间
200 小时
主持人
参赛人数
21