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 All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"math"
"os"
)
type Lamp struct {
x, y, yy float64
k float64
limit float64
a90 bool
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n, lInt, rInt int
if _, err := fmt.Fscan(in, &n, &lInt, &rInt); err != nil {
return
}
lf := float64(lInt)
rf := float64(rInt)
if lf >= rf {
fmt.Fprintf(out, "%.15f\n", 0.0)
return
}
lamps := make([]Lamp, n)
for i := 0; i < n; i++ {
var xi, yi, ai int
fmt.Fscan(in, &xi, &yi, &ai)
x := float64(xi)
y := float64(yi)
if ai == 90 {
lamps[i] = Lamp{x: x, y: y, yy: y * y, limit: x, a90: true}
} else {
k := math.Tan(math.Pi * float64(ai) / 180.0)
lamps[i] = Lamp{x: x, y: y, yy: y * y, k: k, limit: x + y/k}
}
}
size := 1 << n
dp := make([]float64, size)
const neg = -1e300
for i := 1; i < size; i++ {
dp[i] = neg
}
dp[0] = lf
const eps = 1e-12
best := lf
for mask := 0; mask < size; mask++ {
cur := dp[mask]
if cur < neg/2 {
continue
}
if cur > best {
best = cur
}
if cur >= rf-eps {
fmt.Fprintf(out, "%.15f\n", rf-lf)
return
}
for i := 0; i < n; i++ {
if mask&(1<<i) != 0 {
continue
}
lamp := lamps[i]
var nv float64
if lamp.a90 {
if cur >= lamp.limit-eps {
nv = rf
} else {
nv = lamp.x + lamp.yy/(lamp.x-cur)
if nv > rf {
nv = rf
}
if nv < cur {
nv = cur
}
}
} else {
if cur >= lamp.limit-eps {
nv = rf
} else {
s := (cur - lamp.x) / lamp.y
denom := 1.0 - s*lamp.k
if denom <= eps {
nv = rf
} else {
nv = lamp.x + lamp.y*(s+lamp.k)/denom
if nv > rf {
nv = rf
}
if nv < cur {
nv = cur
}
}
}
}
if nv >= rf-eps {
fmt.Fprintf(out, "%.15f\n", rf-lf)
return
}
nm := mask | (1 << i)
if nv > dp[nm] {
dp[nm] = nv
}
}
}
if best < lf {
best = lf
}
if best > rf {
best = rf
}
fmt.Fprintf(out, "%.15f\n", best-lf)
}