← Home
For problem statement at 0-999/700-799/720-729/723/problemD.txt this is a correct solution, but verifier at 0-999/700-799/720-729/723/verifierD.go ends with case 6 failed: expected "1\n..*..*.\n***....\n.**.*..\n******.\n.*.***.\n.****.*" got "1\n..*..*.\n***....\n.**.*..\n******.\n.***.*.\n.****.*"
input:
6 7 1
..*..*.
***....
.**.*..
******.
.*.*.*.
.****.*

exit status 1 can you fix the verifier? package main

import (
	"fmt"
	"sort"
)

type Cell struct {
	r, c int
}

func main() {
	var n, m, k int
	if _, err := fmt.Scan(&n, &m, &k); err != nil {
		return
	}

	grid := make([][]byte, n)
	for i := 0; i < n; i++ {
		var s string
		fmt.Scan(&s)
		grid[i] = []byte(s)
	}

	visited := make([][]bool, n)
	for i := 0; i < n; i++ {
		visited[i] = make([]bool, m)
	}

	var lakes [][]Cell
	dr := []int{-1, 1, 0, 0}
	dc := []int{0, 0, -1, 1}

	for i := 0; i < n; i++ {
		for j := 0; j < m; j++ {
			if grid[i][j] == '.' && !visited[i][j] {
				var comp []Cell
				q := []Cell{{i, j}}
				visited[i][j] = true
				isLake := true

				for head := 0; head < len(q); head++ {
					curr := q[head]
					comp = append(comp, curr)

					if curr.r == 0 || curr.r == n-1 || curr.c == 0 || curr.c == m-1 {
						isLake = false
					}

					for d := 0; d < 4; d++ {
						nr := curr.r + dr[d]
						nc := curr.c + dc[d]

						if nr >= 0 && nr < n && nc >= 0 && nc < m {
							if grid[nr][nc] == '.' && !visited[nr][nc] {
								visited[nr][nc] = true
								q = append(q, Cell{nr, nc})
							}
						}
					}
				}

				if isLake {
					lakes = append(lakes, comp)
				}
			}
		}
	}

	sort.Slice(lakes, func(i, j int) bool {
		return len(lakes[i]) < len(lakes[j])
	})

	filled := 0
	for i := 0; i < len(lakes)-k; i++ {
		filled += len(lakes[i])
		for _, c := range lakes[i] {
			grid[c.r][c.c] = '*'
		}
	}

	fmt.Println(filled)
	for i := 0; i < n; i++ {
		fmt.Println(string(grid[i]))
	}
}