:i P1232 - 谢博博的一天 - 铁一启智tyqzOJ

1232: 谢博博的一天

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:93 解决:6

题目描述

题目背景:

谢博博是一种很可爱的动物…… 

谢博博很喜欢一个人在铁一机房里乱转……

谢博博是一种很不聪明的动物……

谢博博会撞到墙上之后转弯……

谢博博是一种很喜欢右边的动物……

谢博博撞墙之后只会右转…… 

谢博博是一种喜欢慢慢走路的动物……

谢博博一次只会走一格……

谢博博是一个有计划的动物……

谢博博想让你帮他算出来他在机房一天可以到的地方……

谢博博是一种喜欢幻想的动物……

谢博博想要 $AK$ $IOI$ (雾 


题目描述

 机房一个 $n$ 行 $m$ 列的字符表来表示。我们将第 $i$ 行第 $j$ 列的位置的坐标记作 $(i, j)(1 \leq i \leq n, 1 \leq j \leq m)$。如果这个位置的字符为 $\tt x$,即代表这个位置上有障碍,不可通过。反之,若这个位置的字符为 $\tt.$,即代表这个位置是一片空地,可以通过。 谢博博的向两部分组成。其中位置由坐标 $(x, y)(1 \leq x \leq n, 1 \leq y \leq m)$ 刻画,它表示谢博博 行第 $y$ 列的位置。而朝向用一个 $0 \sim 3$ 的 整数 $d$ 表示,其中 $d = 0$ 代表向右d = 1$ 代表向下d = 2$ 代表向左d = 3$ 代表向上 初始时,谢博博位于$(x_0, y_0)$,朝向为 $d_0$。保证初始时所在的位置为空地

接下来将要进行 $k$ 次操作。每一步,谢博博将按照如下的模式操作: 

1. 假谢博博 $(x, y)$,朝向为 $d$。则它的方向上的下一步的位置 $(x′, y′)$ 定义如下:若 $d = 0$,则令 $(x′, y′) = (x, y + 1)$,若 $d = 1$,则令 $(x′, y′) = (x + 1, y)$,若 $d = 2$,则令 $(x′, y′) = (x, y - 1)$,若 $d = 3$,则令 $(x′, y′) = (x − 1, y)$。 

2. 接下来,谢博博置是否在地图内,且是否为空地。具体地说,它判断 $(x′, y′)$ 是否满足 $1 <= x′ <= n, 1 <= y′ <= m$,且 $(x′, y′)$ 位置上是空地。如果条件成立,则谢博博会向前走一步。它新的位置变为 $(x′, y′)$,且朝向不变。如果条件不成立,则它会执行“向右转”操作。也就是说,令 $d′ = (d + 1) mod 4$(即 $d + 1$ 除以 $4$ 的余数),且它所处的位置保持不变,但朝向由 $d$ 变为 $d′$。

输入

输入的第一行包含一个正整数 $T$,表示数据组数。 接下来包含 $T$ 组数据,每组数据的格式如下: 第一行包含三个正整数 $n, m, k$。其中 $n, m$ 表示地图的行数和列数,$k$ 表示谢博博操作的次数。 第二行包含两个正整数 $x_0, y_0$ 和一个非负整数 $d_0$。 接下来 $n$ 行,每行包含一个长度为 $m$ 的字符串。保证字符串中只包含 $\tt{x}$ 和 $\tt{.}$ 两个字符。其中,第 $x$ 行的字符串的第 $y$ 个字符代表的位置为 $(x, y)$。这个位置是 $\tt{x}$ 即代表它是障碍,否则代表它是空地。

输出

对于每组数据:输出一行包含一个正整数,表示所有被谢博博经过的位置(包括起始位置)的个数。

样例输入 复制

2
1 5 4
1 1 2
....x
5 5 20
1 1 0
.....
.xxx.
.x.x.
..xx.
x....

样例输出 复制

3
13

提示

数据点范围:

对于所有测试数据,保证:$1 \leq T \leq 5, 1 \leq n, m \leq 10^3$,$1 \leq k \leq 10^{18}$,$1 \leq x_0 \leq n$,$1 \leq y_0 \leq m$,$0 \leq d_0 \leq 3$,且谢博博的起始位置为空地。

 (学长提示:为了你们不要 $听取TLE声一片$,有50%的 $k \leq 10^5$)

 (填空题:不开_________见____)


彩蛋:https://www.luogu.com.cn/user/1046406