結果
問題 | No.179 塗り分け |
ユーザー |
![]() |
提出日時 | 2019-03-10 14:21:40 |
言語 | Go (1.23.4) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,315 bytes |
コンパイル時間 | 10,911 ms |
コンパイル使用メモリ | 223,208 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-06-23 15:18:01 |
合計ジャッジ時間 | 12,527 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 6 |
other | AC * 33 WA * 7 |
ソースコード
package main import ( "fmt" ) func main() { var h, w int _, _ = fmt.Scan(&h, &w) line := "" paint := make([]int, h*w) black := make([]int, 0) for i := 0; i < h; i++ { _, _ = fmt.Scan(&line) for j, c := range line { if string(c) == "#" { paint[i*w+j] = 1 black = append(black, i*w+j) } } } // fmt.Println(black) if len(black)%2 != 0 { fmt.Println("NO") return } // 先頭から次のマスを塗る場合、次の次のマスを塗る場合、とシフトする数を増やしていく // 最小は1で、最大は全部のマス - 塗るマス for i := 1; i <= len(paint)-len(black)+1; i++ { filled := make(map[int]int, 0) r := true yShift := i / w // y軸にシフトする数 for j := 0; j < len(black); j++ { p := black[j] if filled[p] == 1 { continue } // 移動先が存在していない、移動先が塗られていないマス、移動先が使用済み、y軸のシフト数が違う場合 で失敗 if p+i >= len(paint) || paint[p+i] == 0 || filled[p+i] == 1 || (p%w+i)/w != yShift { r = false break } // fmt.Println(i, j, p, p+i >= len(paint), paint[p+i] == 0, filled[p+i] == 1, len(black), filled, black) filled[p] = 1 filled[p+i] = 1 } if r { fmt.Println("YES") return } } fmt.Println("NO") }