1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package main
- import "fmt"
- func main() {
- var T int
- fmt.Scan(&T)
- for tc := 1; tc <= T; tc++ {
- var R, C int
- fmt.Scan(&R, &C)
- cake := make([][]byte, R)
- stop := make([][]bool, R)
- for i := 0; i < R; i++ {
- fmt.Scan(&cake[i])
- stop[i] = make([]bool, C)
- for j, b := range cake[i] {
- stop[i][j] = b == '?'
- }
- }
- for r := 0; r < R; r++ {
- for c := 0; c < C; c++ {
- if stop[r][c] {
- continue
- }
- expand(cake, cake[r][c], R, C, r, c, r, c)
- }
- }
- fmt.Printf("Case #%d:\n", tc)
- for i := 0; i < R; i++ {
- fmt.Println(string(cake[i]))
- }
- }
- }
- // .--> x
- // |
- // |
- // v
- // y
- func expand(cake [][]byte, init byte, R, C, r1, c1, r2, c2 int) {
- isExpand := false
- for 0 < c1 { // Left
- i := r1
- for ; i <= r2 && cake[i][c1-1] == '?'; i++ {
- }
- if i <= r2 {
- break
- }
- c1--
- for i = r1; i <= r2; i++ {
- cake[i][c1] = init
- }
- isExpand = true
- }
- for 0 < r1 { // Up
- i := c1
- for ; i <= c2 && cake[r1-1][i] == '?'; i++ {
- }
- if i <= c2 {
- break
- }
- r1--
- for i := c1; i <= c2; i++ {
- cake[r1][i] = init
- }
- isExpand = true
- }
- for c2 < C-1 { // Right
- i := r1
- for ; i <= r2 && cake[i][c2+1] == '?'; i++ {
- }
- if i <= r2 {
- break
- }
- c2++
- for i = r1; i <= r2; i++ {
- cake[i][c2] = init
- }
- isExpand = true
- }
- for r2 < R-1 { // Down
- i := c1
- for ; i <= c2 && cake[r2+1][i] == '?'; i++ {
- }
- if i <= c2 {
- break
- }
- r2++
- for i = c1; i <= c2; i++ {
- cake[r2][i] = init
- }
- isExpand = true
- }
- if isExpand {
- expand(cake, init, R, C, r1, c1, r2, c2)
- }
- }
|