結果
| 問題 |
No.179 塗り分け
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-03-31 13:54:55 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 1,758 ms / 3,000 ms |
| コード長 | 1,026 bytes |
| コンパイル時間 | 44 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 18,944 KB |
| 最終ジャッジ日時 | 2024-07-23 14:35:29 |
| 合計ジャッジ時間 | 8,928 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 6 |
| other | AC * 40 |
コンパイルメッセージ
Syntax OK
ソースコード
h, w = gets.split.map(&:to_i)
s = h.times.map{ gets }
board = { h: h, w: w, s: s }
def is_empty?(board)
board[:s].each do |row|
return false if row =~ /#/o
end
true
end
def include_index?(board, i, j)
0 <= i && i < board[:h] && 0 <= j && j < board[:w]
end
def can_paint_bicolor?(board, dx, dy)
h, w = board[:h], board[:w]
checked = Array.new(h){ Array.new(w, false) }
result = true
h.times do |i|
break unless result
w.times do |j|
break unless result
next if checked[i][j]
next if '#' != board[:s][i][j]
checked[i][j] = true
ni, nj = i + dx, j + dy
if !include_index?(board, ni, nj) || '#' != board[:s][ni][nj]
result = false
break
end
checked[ni][nj] = true
end
end
result
end
if is_empty?(board)
puts 'NO'
exit 0
end
ok = false
h.times do |dx|
break if ok
((1-w)...w).each do |dy|
break if ok
next if 0 == dx && 0 == dy
ok |= can_paint_bicolor?(board, dx, dy)
end
end
puts ok ? 'YES' : 'NO'