← Home
For problem statement at 0-999/600-699/680-689/682/problemE.txt this is a correct solution, but verifier at 0-999/600-699/680-689/682/verifierE.go ends with All tests passed can you fix the verifier? package main

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

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

type Point struct {
	x, y int64
}

func area2(p1, p2, p3 Point) int64 {
	return abs((p2.x-p1.x)*(p3.y-p1.y) - (p3.x-p1.x)*(p2.y-p1.y))
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	var S int64
	fmt.Fscan(reader, &n, &S)

	pts := make([]Point, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &pts[i].x, &pts[i].y)
	}

	A := pts[0]
	var B, C Point

	for i := 1; i < n; i++ {
		if pts[i].x != A.x || pts[i].y != A.y {
			B = pts[i]
			break
		}
	}

	for i := 1; i < n; i++ {
		if area2(A, B, pts[i]) > 0 {
			C = pts[i]
			break
		}
	}

	for {
		updated := false

		maxA := A
		maxArea := area2(A, B, C)
		for i := 0; i < n; i++ {
			if area2(pts[i], B, C) > maxArea {
				maxArea = area2(pts[i], B, C)
				maxA = pts[i]
				updated = true
			}
		}
		A = maxA

		maxB := B
		maxArea = area2(A, B, C)
		for i := 0; i < n; i++ {
			if area2(A, pts[i], C) > maxArea {
				maxArea = area2(A, pts[i], C)
				maxB = pts[i]
				updated = true
			}
		}
		B = maxB

		maxC := C
		maxArea = area2(A, B, C)
		for i := 0; i < n; i++ {
			if area2(A, B, pts[i]) > maxArea {
				maxArea = area2(A, B, pts[i])
				maxC = pts[i]
				updated = true
			}
		}
		C = maxC

		if !updated {
			break
		}
	}

	res1 := Point{B.x + C.x - A.x, B.y + C.y - A.y}
	res2 := Point{A.x + C.x - B.x, A.y + C.y - B.y}
	res3 := Point{A.x + B.x - C.x, A.y + B.y - C.y}

	fmt.Printf("%d %d\n%d %d\n%d %d\n", res1.x, res1.y, res2.x, res2.y, res3.x, res3.y)
}