No.3803 Crossword Key Checker
問題文
$H \times W$ の大きさのクロスワードがあります。
フレロビくんはクロスワードを作りましたが、成立しているか不安なのでちゃんと確かめることにしました。
$H \times W$ の盤面が、 $H$ 個の文字列 $S_1,S_2,\cdots,S_H$ によって与えられます。
上から $i$ 番目、左から $j$ 番目のマスは、 $S_i$ の $j$ 文字目が # の場合は黒マス、.の場合は白マスです。
また、カギの数を $K$ として、横のカギの答えの文字列が $K$ 個の文字列 $R_1,R_2,\cdots,R_K$ 、
縦のカギの答えの文字列も $K$ 個の文字列 $C_1,C_2,\cdots,C_K$ から与えられます。
ただし、該当する横のカギや縦のカギが存在しない場合は、-が与えられます。
このクロスワードが成立しているかを判定してください。
なお、クロスワードが成立しているとは、次の条件をどちらも満たすものとします。
- それぞれのカギについて、文字列の長さとそこから連続する白マスの数が等しい。
- それぞれのカギに文字列を当てはめたとき、横のカギと縦のカギが重なる部分は同じ文字である。
カギのある位置は、次の条件のいずれかを満たすものとします。
- 横のカギ: そのマスが白マスかつ、そのマスの左が黒マスまたは盤面の外であり、そのマスの右が白マスである。
- 縦のカギ: そのマスが白マスかつ、そのマスの上が黒マスまたは盤面の外であり、そのマスの下が白マスである。
横のカギと縦のカギが重複する場合があることに注意してください。その場合はどちらも同じ添字を使います。
また、カギの添字は1から始まり、盤面の上側の方が小さく、同じ行では左側が小さいものとします。
カギの数は、カギの添字の最大値に等しいです。
この問題の制約上では、カギが少なくとも1つは存在します。
制約
- $2 \le H,W \le 100$
- $H,W,K$ は整数
- $S_i$ は
#または.で構成される長さ $W$ の文字列 - $S$ に
.が少なくとも2つはある - 全ての
.には少なくとも上下左右のいずれかに他の.が隣接している - $K$ はカギの添字の最大値に等しい
- $R_i$ は英小文字からなる文字列であるか、
-である - $C_i$ は英小文字からなる文字列であるか、
-である - $1 \le |R_i| \le W$
- $1 \le |C_i| \le H$
入力
$H\ W$ $S_1$ $\vdots$ $S_H$ $K$ $R_1\ C_1$ $\vdots$ $R_K\ C_K$
出力
クロスワードが成立している場合は Yes 、成立していない場合は No を出力してください。
最後に改行をしてください。
サンプル
サンプル1
入力
5 5 ##### #...# #.### #.### ##### 1 one out
出力
Yes
重なる部分が同じ文字になっており、クロスワードが成立しているので Yes を出力します。
サンプル2
入力
5 5 ##### ##.## #...# ##.## ##### 2 - one out -
出力
No
重なる部分が異なる文字になっており、クロスワードが成立していないので No を出力します。
サンプル3
入力
3 5 ##### #...# ##### 1 nihoel -
出力
No
そもそも文字数が合わないという場合もあります。
サンプル4
入力
5 5 ##### #...# ###.# ###.# ##### 2 hi - - top
出力
No
実際に埋めると白マスが余らないように見えますが、横のカギ1で長さが不足しています。
この場合では、横のカギ1は hi ではなく hit が適切です。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。
ふらわぁ