For problem statement at 0-999/600-699/670-679/679/problemC.txt this is a correct solution, but verifier at 0-999/600-699/670-679/679/verifierC.go ends with All 100 tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n, k int
fmt.Fscan(reader, &n, &k)
grid := make([]string, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &grid[i])
}
comp := make([][]int, n)
for i := 0; i < n; i++ {
comp[i] = make([]int, n)
}
compSize := []int{0}
idCounter := 1
q := make([][2]int, 0, n*n)
for i := 0; i < n; i++ {
for j := 0; j < n; j++ {
if grid[i][j] == '.' && comp[i][j] == 0 {
q = q[:0]
q = append(q, [2]int{i, j})
comp[i][j] = idCounter
size := 0
for head := 0; head < len(q); head++ {
r, c := q[head][0], q[head][1]
size++
if r > 0 && grid[r-1][c] == '.' && comp[r-1][c] == 0 {
comp[r-1][c] = idCounter
q = append(q, [2]int{r - 1, c})
}
if r < n-1 && grid[r+1][c] == '.' && comp[r+1][c] == 0 {
comp[r+1][c] = idCounter
q = append(q, [2]int{r + 1, c})
}
if c > 0 && grid[r][c-1] == '.' && comp[r][c-1] == 0 {
comp[r][c-1] = idCounter
q = append(q, [2]int{r, c - 1})
}
if c < n-1 && grid[r][c+1] == '.' && comp[r][c+1] == 0 {
comp[r][c+1] = idCounter
q = append(q, [2]int{r, c + 1})
}
}
compSize = append(compSize, size)
idCounter++
}
}
}
maxAns := 0
for _, s := range compSize {
if s > maxAns {
maxAns = s
}
}
freq := make([]int, idCounter)
visited := make([]bool, idCounter)
ids := make([]int, 0, 4*k)
for i := 0; i <= n-k; i++ {
for r := i; r < i+k; r++ {
for c := 0; c < k; c++ {
if comp[r][c] > 0 {
freq[comp[r][c]]++
}
}
}
for j := 0; j <= n-k; j++ {
if j > 0 {
for r := i; r < i+k; r++ {
if comp[r][j-1] > 0 {
freq[comp[r][j-1]]--
}
if comp[r][j+k-1] > 0 {
freq[comp[r][j+k-1]]++
}
}
}
ids = ids[:0]
if i > 0 {
for c := j; c < j+k; c++ {
if comp[i-1][c] > 0 {
ids = append(ids, comp[i-1][c])
}
}
}
if i+k < n {
for c := j; c < j+k; c++ {
if comp[i+k][c] > 0 {
ids = append(ids, comp[i+k][c])
}
}
}
if j > 0 {
for r := i; r < i+k; r++ {
if comp[r][j-1] > 0 {
ids = append(ids, comp[r][j-1])
}
}
}
if j+k < n {
for r := i; r < i+k; r++ {
if comp[r][j+k] > 0 {
ids = append(ids, comp[r][j+k])
}
}
}
sum := k * k
for _, id := range ids {
if !visited[id] {
visited[id] = true
sum += compSize[id] - freq[id]
}
}
if sum > maxAns {
maxAns = sum
}
for _, id := range ids {
visited[id] = false
}
}
for r := i; r < i+k; r++ {
for c := n - k; c < n; c++ {
if comp[r][c] > 0 {
freq[comp[r][c]]--
}
}
}
}
fmt.Println(maxAns)
}