[ARC005B] P-CASカードと高橋君
题意翻译
## 题目描述
高桥君为了准备即将到来的7月27日土用丑日,打算邮购一些高级鳗鱼食材,通过网上银行来支付。
高桥君使用的银行卡背面有下图所示的9×9密码表。支付的时候从表中某一位置开始根据指定的方向连续读4个数字作为验证码输入,验证是否是本人操作。
下图的例子是从左边第一列,上方第一行开始,按斜右下的方向连续读4个数字。此时读出来的数字是7930.
![从1行1列斜右下方读4个数字的例子](https://cdn.luogu.org/upload/vjudge_pic/AT212/1322cf9dc84e8f92c1d1bc5a04632c79ef77742b.png)
如果读数的过程中超过了边界,就要将方向改变,然后继续读剩余的数字。改变方向的规则如下:
- 原方向是上下左右时
- 将原方向180°调转
- 原方向是斜向时
- 在对角线上时
- 将原方向180°调转
- 遇到左右边界时
- 上下方向不变,左右方向调转
- 遇到上下边界时
- 左右方向不变,上下方向调转
总之如下图所示
![方向改变规则一览](https://cdn.luogu.org/upload/vjudge_pic/AT212/3ac92d5cd0fc3557db9edd76ec244f9fa94d4afd.png)
给出密码表、起始位置和方向,要求输出相应的4位验证码。
## 输入输出格式
### 输入格式:
```
x y W
c11 c12 ... c19
c21 c22 ... c29
:
:
c91 c92 ... c99
```
- 共10行输入
- 第1行,整数x代表列(1≤x≤9),整数y代表行(1≤y≤9),W表示方向
- W是R、L、U、D、RU、RD、LU、LD的其中一种
- R : 右方向
- L : 左方向
- U : 上方向
- D : 下方向
- RU : 右上方向
- RD : 右下方向
- LU : 左上方向
- LD : 左下方向
- 第2行到第9行是密码表中的整数Cij(1≦i,j≦9)
- i和j表示第i行第j列数字Cij
- Cij的范围是0~9
### 输出格式:
输出一行四个整数,最后输出换行。
## 输入输出样例
### 输入样例#1
```
3 5 R
790319030
091076399
143245946
590051196
398226115
442567154
112705290
716433235
221041645
```
### 输出样例#1
```
8226
```
### 输入样例#2
```
8 9 LU
206932999
471100777
973172688
108989704
246954192
399039569
944715218
003664867
219006823
```
### 输出样例#2
```
2853
```
### 输入样例#3
```
5 7 D
271573743
915078603
102553534
996473623
595593497
573572507
340348994
253066837
643845096
```
### 输出样例#3
```
4646
```
### 输入样例#4
```
2 2 LU
729142134
509607882
640003027
215270061
214055727
745319402
777708131
018697986
277156993
```
### 输出样例#4
```
0700
```
### 输入样例#5
```
8 7 RD
985877833
469488482
218647263
856777094
012249580
845463670
919136580
011130808
874387671
```
### 输出样例#5
```
8878
```
## 说明
### 样例1
- 3列5行,右方向
![](https://cdn.luogu.org/upload/vjudge_pic/AT212/5e27e15dada42139db5cd3b98f6db7752ae9a657.png)
### 样例2
- 8列9行,左上方向
![](https://cdn.luogu.org/upload/vjudge_pic/AT212/9dc284a6840179386ceb1db5c03530bf6fc8a940.png)
### 样例3
- 5列7行,下方向,遇到下边界,改变方向继续读数
![](https://cdn.luogu.org/upload/vjudge_pic/AT212/d911646cf5ec9ec68da2abe6f843348c89f7f7be.png)
### 样例4
- 2行2列,左上方向,遇到边界,改变方向继续读数
![](https://cdn.luogu.org/upload/vjudge_pic/AT212/f7d82020d9c29a8c427cfb43bd1e4427c999dbd7.png)
### 样例5
- 8行7列,右下方向,遇到边界,改变方向继续读数
![](https://cdn.luogu.org/upload/vjudge_pic/AT212/2aaec32b8dda904f581a7276183c4b15c70541a9.png)
题目描述
[problemUrl]: https://atcoder.jp/contests/arc005/tasks/arc005_2
高橋君は来る $ 7 $ 月 $ 27 $ 日の土用の丑の日に備えて、高級なうなぎを通販で買うことにしました。支払いはネット銀行を通して行います。
高橋君が利用しているネット銀行のカードの裏には、下図のような縦 $ 9 $ 文字 $ ×横 $ $ 9 $ 文字の数字から成る乱数表がついています。支払う時は、この乱数表の指定された位置から縦横斜めの中で指定された向きに $ 4 $ 文字連続で抜き出して入力し、それが正しいかによって本人確認を行います。
下図は「上から $ 1 $ 文字目、左から $ 1 $ 文字目」の位置から「右下斜め」の方向が指定された時の $ 4 $ 文字を抜き出した例です。この場合は $ 7930 $ が入力する数字になります。
![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_arc005_2/1322cf9dc84e8f92c1d1bc5a04632c79ef77742b.png)図:$ 1 $ 行目 $ 1 $ 文字目から右下方向に $ 4 $ 文字抜き出す例
乱数表の一番端の文字を抜き出した後もさらに文字を抜き出す必要がある場合は、向きを変更して残りの文字を抜き出します。向きの変更は以下のように行います。
- 読み込み時に進んでいた方向が上下左右の場合
- 向きを $ 180 $ 度変える
- 読み込み時に進んでいた方向が斜めの場合
- 角で向きを変更する場合
- 向きを $ 180 $ 度変える
- 左右の端で向きを変更する場合
- 左右への向きのみ逆にし、上下への向きはそのままにする
- 上下の端で向きを変更する場合
- 上下への向きのみ逆にし、左右への向きはそのままにする
これらの向きの変更を図で示すと下図のようになる。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_arc005_2/3ac92d5cd0fc3557db9edd76ec244f9fa94d4afd.png)図:変更する向きの一覧
乱数表、抜き出す最初の数字の位置、抜き出す向きが与えられる時、本人確認のため入力する $ 4 $ 文字を答えてください。 入力は以下の形式で標準入力から与えられる。 > $ x $ $ y $ $ W $ $ c_{11}c_{12} $…$ c_{19} $ $ c_{21}c_{22} $…$ c_{29} $ : : $ c_{91}c_{92} $…$ c_{99} $
- 入力は $ 10 $ 行ある。
- $ 1 $ 行目には、抜き出す最初の数字が左から何文字目かを表す整数 $ x(1≦x≦9) $、抜き出す最初の数字が上から何文字目かを表す整数 $ y(1≦y≦9) $、抜き出す方向を表す $ W $ が空白で区切られて与えられる。
- 抜き出す方向 $ W $ は `R`、`L`、`U`、`D`、`RU`、`RD`、`LU`、`LD` のいずれかで与えられ、抜き出す方向が以下であることを表す。
- `R` : 右方向
- `L` : 左方向
- `U` : 上方向
- `D` : 下方向
- `RU` : 右上に斜め方向
- `RD` : 右下に斜め方向
- `LU` : 左上に斜め方向
- `LD` : 左下に斜め方向
- $ 2 $ 行目からの $ 9 $ 行は、乱数表の数字を表す整数 $ c_{ij}(1≦i,j≦9) $ が与えられる。
- $ i $ 行目 $ j $ 番目の数字は、乱数表の上から $ i $ 番目、左から $ j $ 番目の数字が $ c_{ij} $ であることを表す。
- $ c_{ij} $ は `0`-`9`のいずれかである。
指定された位置から指定された方向に数字を $ 4 $ 文字抜き出し、それらの数字を標準出力に $ 1 $ 行で出力せよ。
なお、最後には改行を出力せよ。 ```
3 5 R
790319030
091076399
143245946
590051196
398226115
442567154
112705290
716433235
221041645
```
```
8226
```
- 乱数表から抜き出す $ 4 $ 文字は下図のように右方向に抜き出します。
![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_arc005_2/5e27e15dada42139db5cd3b98f6db7752ae9a657.png)
```
8 9 LU
206932999
471100777
973172688
108989704
246954192
399039569
944715218
003664867
219006823
```
```
2853
```
- 乱数表から抜き出す $ 4 $ 文字は下図のように左上方向に抜き出します。
![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_arc005_2/9dc284a6840179386ceb1db5c03530bf6fc8a940.png)
```
5 7 D
271573743
915078603
102553534
996473623
595593497
573572507
340348994
253066837
643845096
```
```
4646
```
- 下図のように下方向へ $ 3 $ 文字抜き出した後、向きを上方向に変えて残りの $ 1 $ 文字を抜き出します。
![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_arc005_2/d911646cf5ec9ec68da2abe6f843348c89f7f7be.png)
```
2 2 LU
729142134
509607882
640003027
215270061
214055727
745319402
777708131
018697986
277156993
```
```
0700
```
- 下図のように左上方向へ $ 2 $ 文字抜き出した後、向きを右下方向に変えて残りの $ 2 $ 文字を抜き出します。
![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_arc005_2/f7d82020d9c29a8c427cfb43bd1e4427c999dbd7.png)
```
8 7 RD
985877833
469488482
218647263
856777094
012249580
845463670
919136580
011130808
874387671
```
```
8878
```
- 下図のように右下方向へ $ 1 $ 文字抜き出した後、向きを左下方向に変えて残りの文字を抜き出します。
- $ 3 $ 文字目まで抜き出した後、さらに向きを左上方向に変えて残りの $ 1 $ 文字を抜き出します。
![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_arc005_2/2aaec32b8dda904f581a7276183c4b15c70541a9.png)