For problem statement at 0-999/300-399/380-389/385/problemD.txt this is a correct solution, but verifier at 0-999/300-399/380-389/385/verifierD.go ends with case 1 failed: expected 5.952775 got -4.000000
input:
3 4.670784 10.623559
2.925639 3.447966 27.745747
9.150138 9.620193 37.277303
4.822664 8.567262 74.668782
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"math"
"os"
)
type Light struct {
x, y float64
q float64
is90 bool
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
var n int
var l, r int
fmt.Fscan(in, &n, &l, &r)
lights := make([]Light, n)
for i := 0; i < n; i++ {
var x, y, a int
fmt.Fscan(in, &x, &y, &a)
lights[i].x = float64(x)
lights[i].y = float64(y)
if a == 90 {
lights[i].is90 = true
} else {
lights[i].q = math.Tan(float64(a) * math.Pi / 180.0)
}
}
L := float64(l)
R := float64(r)
m := 1 << n
dp := make([]float64, m)
negInf := -1e300
for i := 1; i < m; i++ {
dp[i] = negInf
}
dp[0] = L
ans := L
for mask := 0; mask < m; mask++ {
p := dp[mask]
if p == negInf {
continue
}
if p > ans {
ans = p
}
if p >= R {
continue
}
for i := 0; i < n; i++ {
if mask&(1<<i) != 0 {
continue
}
lt := lights[i]
var v float64
if lt.is90 {
if p >= lt.x {
v = R
} else {
v = lt.x - lt.y*lt.y/(p-lt.x)
if v > R {
v = R
}
}
} else {
t := (p - lt.x) / lt.y
den := 1.0 - t*lt.q
if den <= 0 {
v = R
} else {
v = lt.x + lt.y*(t+lt.q)/den
if v > R {
v = R
}
}
}
nmask := mask | (1 << i)
if v > dp[nmask] {
dp[nmask] = v
}
}
}
if ans > R {
ans = R
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
fmt.Fprintf(out, "%.15f\n", ans-L)
out.Flush()
}