← Home
For problem statement at 0-999/500-599/510-519/518/problemF.txt this is a correct solution, but verifier at 0-999/500-599/510-519/518/verifierF.go ends with case 2 failed: expected 6 got 8
input:4 5
.....
#...#
.##..
#.#.#
exit status 1 can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, m int
	fmt.Fscan(reader, &n, &m)
	grid := make([][]byte, n)
	for i := 0; i < n; i++ {
		var s string
		fmt.Fscan(reader, &s)
		grid[i] = []byte(s)
	}

	up := make([][]int, n)
	down := make([][]int, n)
	left := make([][]int, n)
	right := make([][]int, n)
	for i := 0; i < n; i++ {
		up[i] = make([]int, m)
		down[i] = make([]int, m)
		left[i] = make([]int, m)
		right[i] = make([]int, m)
	}

	for i := 0; i < n; i++ {
		for j := 0; j < m; j++ {
			if grid[i][j] == '#' {
				up[i][j] = 0
			} else if i == 0 {
				up[i][j] = 1
			} else {
				up[i][j] = up[i-1][j] + 1
			}
		}
	}

	for i := n - 1; i >= 0; i-- {
		for j := 0; j < m; j++ {
			if grid[i][j] == '#' {
				down[i][j] = 0
			} else if i == n-1 {
				down[i][j] = 1
			} else {
				down[i][j] = down[i+1][j] + 1
			}
		}
	}

	for i := 0; i < n; i++ {
		for j := 0; j < m; j++ {
			if grid[i][j] == '#' {
				left[i][j] = 0
			} else if j == 0 {
				left[i][j] = 1
			} else {
				left[i][j] = left[i][j-1] + 1
			}
		}
	}

	for i := 0; i < n; i++ {
		for j := m - 1; j >= 0; j-- {
			if grid[i][j] == '#' {
				right[i][j] = 0
			} else if j == m-1 {
				right[i][j] = 1
			} else {
				right[i][j] = right[i][j+1] + 1
			}
		}
	}

	var ans int64 = 0

	for i := 1; i < n-1; i++ {
		if left[i][m-1] >= m {
			ans++
		}
	}

	for j := 1; j < m-1; j++ {
		if up[n-1][j] >= n {
			ans++
		}
	}

	for i := 1; i < n-1; i++ {
		for j := 1; j < m-1; j++ {
			if grid[i][j] == '.' {
				if up[i][j] >= i+1 && left[i][j] >= j+1 {
					ans++
				}
				if up[i][j] >= i+1 && right[i][j] >= m-j {
					ans++
				}
				if down[i][j] >= n-i && left[i][j] >= j+1 {
					ans++
				}
				if down[i][j] >= n-i && right[i][j] >= m-j {
					ans++
				}
			}
		}
	}

	for j := 1; j < m-1; j++ {
		i := 1
		for i < n-1 {
			if grid[i][j] == '#' {
				i++
				continue
			}
			start := i
			for i < n-1 && grid[i][j] == '.' {
				i++
			}
			end := i - 1
			var sum int64 = 0
			var sumsq int64 = 0
			for r := start; r <= end; r++ {
				a := 0
				if left[r][j] >= j+1 {
					a++
				}
				if right[r][j] >= m-j {
					a++
				}
				sum += int64(a)
				sumsq += int64(a * a)
			}
			ans += (sum*sum - sumsq) / 2
		}
	}

	for i := 1; i < n-1; i++ {
		j := 1
		for j < m-1 {
			if grid[i][j] == '#' {
				j++
				continue
			}
			start := j
			for j < m-1 && grid[i][j] == '.' {
				j++
			}
			end := j - 1
			var sum int64 = 0
			var sumsq int64 = 0
			for c := start; c <= end; c++ {
				b := 0
				if up[i][c] >= i+1 {
					b++
				}
				if down[i][c] >= n-i {
					b++
				}
				sum += int64(b)
				sumsq += int64(b * b)
			}
			ans += (sum*sum - sumsq) / 2
		}
	}

	fmt.Println(ans)
}
```