main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package main
  2. import "fmt"
  3. func main() {
  4. var T int
  5. fmt.Scan(&T)
  6. for tc := 1; tc <= T; tc++ {
  7. var R, C int
  8. fmt.Scan(&R, &C)
  9. cake := make([][]byte, R)
  10. stop := make([][]bool, R)
  11. for i := 0; i < R; i++ {
  12. fmt.Scan(&cake[i])
  13. stop[i] = make([]bool, C)
  14. for j, b := range cake[i] {
  15. stop[i][j] = b == '?'
  16. }
  17. }
  18. for r := 0; r < R; r++ {
  19. for c := 0; c < C; c++ {
  20. if stop[r][c] {
  21. continue
  22. }
  23. expand(cake, cake[r][c], R, C, r, c, r, c)
  24. }
  25. }
  26. fmt.Printf("Case #%d:\n", tc)
  27. for i := 0; i < R; i++ {
  28. fmt.Println(string(cake[i]))
  29. }
  30. }
  31. }
  32. // .--> x
  33. // |
  34. // |
  35. // v
  36. // y
  37. func expand(cake [][]byte, init byte, R, C, r1, c1, r2, c2 int) {
  38. isExpand := false
  39. for 0 < c1 { // Left
  40. i := r1
  41. for ; i <= r2 && cake[i][c1-1] == '?'; i++ {
  42. }
  43. if i <= r2 {
  44. break
  45. }
  46. c1--
  47. for i = r1; i <= r2; i++ {
  48. cake[i][c1] = init
  49. }
  50. isExpand = true
  51. }
  52. for 0 < r1 { // Up
  53. i := c1
  54. for ; i <= c2 && cake[r1-1][i] == '?'; i++ {
  55. }
  56. if i <= c2 {
  57. break
  58. }
  59. r1--
  60. for i := c1; i <= c2; i++ {
  61. cake[r1][i] = init
  62. }
  63. isExpand = true
  64. }
  65. for c2 < C-1 { // Right
  66. i := r1
  67. for ; i <= r2 && cake[i][c2+1] == '?'; i++ {
  68. }
  69. if i <= r2 {
  70. break
  71. }
  72. c2++
  73. for i = r1; i <= r2; i++ {
  74. cake[i][c2] = init
  75. }
  76. isExpand = true
  77. }
  78. for r2 < R-1 { // Down
  79. i := c1
  80. for ; i <= c2 && cake[r2+1][i] == '?'; i++ {
  81. }
  82. if i <= c2 {
  83. break
  84. }
  85. r2++
  86. for i = c1; i <= c2; i++ {
  87. cake[r2][i] = init
  88. }
  89. isExpand = true
  90. }
  91. if isExpand {
  92. expand(cake, init, R, C, r1, c1, r2, c2)
  93. }
  94. }