← Home
For problem statement at 0-999/900-999/930-939/930/problemD.txt this is a correct solution, but verifier at 0-999/900-999/930-939/930/verifierD.go ends with test 1 failed: expected 56 got 0

exit status 1 can you fix the verifier? ```go
package main

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

const OFFSET = 250000
const MAX_V = 500000
const INF = 1000000000

func floorDiv2(n int) int {
	if n >= 0 {
		return n / 2
	}
	return (n - 1) / 2
}

func ceilDiv2(n int) int {
	if n >= 0 {
		return (n + 1) / 2
	}
	return n / 2
}

func count_parity(L, R, p int) int64 {
	if L > R {
		return 0
	}
	rem := p % 2
	if rem < 0 {
		rem += 2
	}

	min_k := ceilDiv2(L - rem)
	max_k := floorDiv2(R - rem)

	if min_k > max_k {
		return 0
	}
	return int64(max_k - min_k + 1)
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(reader, &n); err != nil {
		return
	}

	max_u := make([]int, MAX_V)
	min_u := make([]int, MAX_V)

	for i := 0; i < MAX_V; i++ {
		max_u[i] = -INF
		min_u[i] = INF
	}

	for i := 0; i < n; i++ {
		var x, y int
		fmt.Fscan(reader, &x, &y)
		u := x + y
		v := x - y
		idx := v + OFFSET
		if u > max_u[idx] {
			max_u[idx] = u
		}
		if u < min_u[idx] {
			min_u[idx] = u
		}
	}

	min_v_b := MAX_V
	max_v_b := -1

	for i := 0; i < MAX_V; i++ {
		if max_u[i] != -INF {
			if i < min_v_b {
				min_v_b = i
			}
			if i > max_v_b {
				max_v_b = i
			}
		}
	}

	if min_v_b >= max_v_b {
		fmt.Println(0)
		return
	}

	pref_max_u := make([]int, MAX_V)
	pref_min_u := make([]int, MAX_V)
	pref_max_u[0] = max_u[0]
	pref_min_u[0] = min_u[0]
	for i := 1; i < MAX_V; i++ {
		pref_max_u[i] = pref_max_u[i-1]
		if max_u[i] > pref_max_u[i] {
			pref_max_u[i] = max_u[i]
		}

		pref_min_u[i] = pref_min_u[i-1]
		if min_u[i] < pref_min_u[i] {
			pref_min_u[i] = min_u[i]
		}
	}

	suff_max_u := make([]int, MAX_V)
	suff_min_u := make([]int, MAX_V)
	suff_max_u[MAX_V-1] = max_u[MAX_V-1]
	suff_min_u[MAX_V-1] = min_u[MAX_V-1]
	for i := MAX_V - 2; i >= 0; i-- {
		suff_max_u[i] = suff_max_u[i+1]
		if max_u[i] > suff_max_u[i] {
			suff_max_u[i] = max_u[i]
		}

		suff_min_u[i] = suff_min_u[i+1]
		if min_u[i] < suff_min_u[i] {
			suff_min_u[i] = min_u[i]
		}
	}

	var ans int64 = 0
	for v_idx := min_v_b + 1; v_idx <= max_v_b-1; v_idx++ {
		f1 := suff_max_u[v_idx+1]
		f2 := pref_max_u[v_idx-1]
		f3 := pref_min_u[v_idx-1]
		f4 := suff_min_u[v_idx+1]

		if f1 == -INF || f2 == -INF || f3 == INF || f4 == INF {
			continue
		}

		R := f1
		if f2 < R {
			R = f2
		}
		R--

		L := f3
		if f4 > L {
			L = f4
		}
		L++

		if L <= R {
			actual_v := v_idx - OFFSET
			ans += count_parity(L, R, actual_v)
		}
	}

	fmt.Println(ans)
}
```