← Home
For problem statement at 1000-1999/1500-1599/1530-1539/1538/problemG.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1530-1539/1538/verifierG.go ends with all tests passed can you fix the verifier? package main

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

func ceilDiv(n, d int64) int64 {
	if d < 0 {
		d = -d
		n = -n
	}
	if n >= 0 {
		return (n + d - 1) / d
	}
	return n / d
}

func floorDiv(n, d int64) int64 {
	if d < 0 {
		d = -d
		n = -n
	}
	if n >= 0 {
		return n / d
	}
	return -(((-n) + d - 1) / d)
}

func feasible(x, y, a, b, k int64) bool {
	if a == b {
		if a == 0 {
			return false
		}
		return k <= min(x/a, y/a)
	}
	if a > b {
		a, b = b, a
	}
	d := b - a
	L := ceilDiv(b*k-x, d)
	if L < 0 {
		L = 0
	}
	U := floorDiv(y-a*k, d)
	if U > k {
		U = k
	}
	return L <= U
}

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

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)
	for ; t > 0; t-- {
		var x, y, a, b int64
		fmt.Fscan(in, &x, &y, &a, &b)
		hi := (x + y) / (a + b)
		var l, r int64 = 0, hi
		var ans int64 = 0
		for l <= r {
			m := (l + r) / 2
			if feasible(x, y, a, b, m) {
				ans = m
				l = m + 1
			} else {
				r = m - 1
			}
		}
		fmt.Fprintln(out, ans)
	}
}