← Home
For problem statement at 0-999/0-99/40-49/40/problemC.txt this is a correct solution, but verifier at 0-999/0-99/40-49/40/verifierC.go ends with Test 2 failed: expected 207 got 219

exit status 1 can you fix the verifier? package main

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

type Interval struct {
	L, R int64
}

func abs(x int64) int64 {
	if x < 0 {
		return -x
	}
	return x
}

func max(a, b int64) int64 {
	if a > b {
		return a
	}
	return b
}

func min(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var N, M, x, y int64
	_, err := fmt.Fscan(reader, &N, &x, &M, &y)
	if err != nil {
		return
	}

	D := abs(x - y)

	var intervals []Interval
	var isolatedU int64 = 0

	var I1, I2 int64 = 0, 0

	for u := int64(1); u <= N; u++ {
		L := max(1, abs(u-D))
		R := min(M, u+D)

		if L > R {
			isolatedU++
			continue
		}

		intervals = append(intervals, Interval{L, R})

		cL := max(1, abs(u-D)+1)
		cR := min(M, u+D-1)

		var crossCount int64 = 0
		if cL <= cR {
			crossCount = cR - cL + 1
		}

		totalCount := R - L + 1
		touchCount := totalCount - crossCount

		I2 += crossCount
		I1 += touchCount
	}

	sort.Slice(intervals, func(i, j int) bool {
		if intervals[i].L == intervals[j].L {
			return intervals[i].R < intervals[j].R
		}
		return intervals[i].L < intervals[j].L
	})

	var mergedCount int64 = 0
	var coveredW int64 = 0
	var currentL int64 = -1
	var currentR int64 = -1

	for _, iv := range intervals {
		if currentR < iv.L {
			if currentL != -1 {
				mergedCount++
				coveredW += currentR - currentL + 1
			}
			currentL = iv.L
			currentR = iv.R
		} else {
			currentR = max(currentR, iv.R)
		}
	}

	if currentL != -1 {
		mergedCount++
		coveredW += currentR - currentL + 1
	}

	isolatedW := M - coveredW
	K_draw := mergedCount + isolatedU + isolatedW
	V_draw := I1 + 2*I2

	F := int64(1) + K_draw + V_draw

	fmt.Println(F)
}