For problem statement at 0-999/600-699/640-649/645/problemG.txt this is a correct solution, but verifier at 0-999/600-699/640-649/645/verifierG.go ends with Case 1 failed: expected 2.077698650711 got 0.000000000
Case 2 failed: expected 5.830951894845 got 0.000000000
Case 3 failed: expected 13.341664064126 got 10.133054272
Case 4 failed: expected 5.808943124590 got 3.024972697
Case 5 failed: expected 8.000000000000 got 4.008361806
Case 6 failed: expected 7.686479507103 got 0.336598234
Case 8 failed: expected 11.922960898495 got 12.000000000
Case 9 failed: expected 4.127244400501 got 0.154303383
Case 10 failed: expected 6.356099432828 got 0.400320513
Case 11 failed: expected 1.344286650601 got 1.142975323
Case 12 failed: expected 1.028991510855 got 0.461576453
Case 13 failed: expected 1.934047708962 got 2.000000000
Case 14 failed: expected 8.968911824204 got 0.000000000
Case 17 failed: expected 3.531372004660 got 1.000641646
Case 18 failed: expected 7.647645813352 got 7.001108257
Case 19 failed: expected 1.240347345892 got 0.363160565
Case 21 failed: expected 11.793087936453 got 2.960710431
Case 22 failed: expected 2.224970797450 got 1.000050129
Case 23 failed: expected 10.318020084374 got 2.089112441
Case 24 failed: expected 8.246211251235 got 0.669546981
Case 25 failed: expected 7.337306424961 got 6.237717259
Case 27 failed: expected 4.850712500727 got 2.284485873
Case 28 failed: expected 5.972615101238 got 4.123729138
Case 29 failed: expected 3.162277660168 got 1.541454212
Case 30 failed: expected 9.965795159983 got 9.778571050
Case 31 failed: expected 3.939543120718 got 0.000000000
Case 32 failed: expected 6.603029607688 got 2.001123293
Case 33 failed: expected 12.991889361798 got 12.846134957
Case 34 failed: expected 11.582480138288 got 0.575200459
Case 35 failed: expected 10.000000000000 got 5.006681222
Case 36 failed: expected 7.161991178929 got 5.827701010
Case 37 failed: expected 5.865776968957 got 1.037936894
Case 38 failed: expected 8.953791677024 got 4.471023171
Case 39 failed: expected 4.560701700397 got 1.005089617
Case 40 failed: expected 8.705388204083 got 8.686347895
Case 41 failed: expected 6.588760483269 got 4.370067287
Case 42 failed: expected 5.343579900577 got 2.301641344
Case 43 failed: expected 4.393059192882 got 0.507645143
Case 45 failed: expected 5.299585183091 got 0.108000208
Case 47 failed: expected 3.728490223168 got 0.706188460
Case 48 failed: expected 13.584993051124 got 14.000000000
Case 49 failed: expected 1.414213562373 got 2.000000000
Case 50 failed: expected 16.124515496597 got 8.317573192
Case 51 failed: expected 5.252257314389 got 0.801313644
Case 52 failed: expected 1.940285000291 got 0.553785969
Case 54 failed: expected 8.376156636549 got 2.029223744
Case 55 failed: expected 16.521893746571 got 15.949860315
Case 56 failed: expected 0.312347523777 got 0.223624493
Case 57 failed: expected 5.568383657016 got 2.010179240
Case 58 failed: expected 6.165237406967 got 1.933566806
Case 59 failed: expected 17.559981240778 got 7.454559038
Case 61 failed: expected 3.016461757349 got 1.215592672
Case 62 failed: expected 5.059644256269 got 4.042638698
Case 67 failed: expected 4.326661530557 got 3.138021732
Case 68 failed: expected 5.099019513593 got 6.000000000
Case 69 failed: expected 1.104315260748 got 0.889512909
Case 70 failed: expected 14.314958357847 got 8.368632932
Case 72 failed: expected 5.820855000872 got 4.888573231
Case 73 failed: expected 8.786353054596 got 5.062257748
Case 74 failed: expected 10.655018149431 got 3.411803643
Case 75 failed: expected 14.482780927578 got 14.255094154
Case 76 failed: expected 12.000000000000 got 4.513394948
Case 77 failed: expected 1.496172486745 got 1.012240883
Case 78 failed: expected 6.468860320501 got 2.043096437
Case 79 failed: expected 11.735831019989 got 12.000000000
Case 80 failed: expected 12.165525060596 got 11.505375059
Case 81 failed: expected 9.344557491769 got 3.044715461
Case 83 failed: expected 9.686059182623 got 5.711707171
Case 84 failed: expected 1.927686782483 got 2.000000000
Case 86 failed: expected 5.056267032004 got 1.751352902
Case 87 failed: expected 7.142749325332 got 6.878491161
Case 88 failed: expected 8.265721242034 got 2.412463651
Case 89 failed: expected 0.431447852368 got 0.000000000
Case 90 failed: expected 3.068449871741 got 3.000137184
Case 94 failed: expected 6.894157799522 got 0.668893916
Case 95 failed: expected 10.499299696534 got 2.016068679
Case 96 failed: expected 3.105971478222 got 1.751774293
Case 97 failed: expected 12.551432648844 got 3.411803645
Case 100 failed: expected 7.696963248142 got 1.684882546
21/100 cases passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"math"
"os"
"sort"
"strconv"
)
type Point struct {
x, y float64
}
type Event struct {
angle float64
id int
}
type EventList []Event
func (a EventList) Len() int { return len(a) }
func (a EventList) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a EventList) Less(i, j int) bool { return a[i].angle < a[j].angle }
var events []Event
var stack []int
var inStack []int
var inStackIter int
func check(D float64, a float64, outposts []Point) bool {
k := D * D / 4.0
if k >= a*a {
return true
}
events = events[:0]
stack = stack[:0]
inStackIter++
CU := math.Sqrt(k)
sqrt_a2_k := math.Sqrt(a*a - k)
for i := 0; i < len(outposts); i++ {
CV := -outposts[i].y * sqrt_a2_k
C := outposts[i].x
R := math.Sqrt(CU*CU + CV*CV)
if R == 0 {
continue
}
ratio := C / R
if ratio > 1.0-1e-11 || ratio < -1.0+1e-11 {
continue
}
phi := math.Atan2(CV, CU)
delta := math.Acos(ratio)
t1 := phi + delta
t2 := phi - delta
for t1 < 0 {
t1 += 2 * math.Pi
}
for t1 >= 2*math.Pi {
t1 -= 2 * math.Pi
}
for t2 < 0 {
t2 += 2 * math.Pi
}
for t2 >= 2*math.Pi {
t2 -= 2 * math.Pi
}
events = append(events, Event{t1, i}, Event{t2, i})
}
sort.Sort(EventList(events))
for i := 1; i < len(events); i++ {
if events[i].angle-events[i-1].angle < 1e-11 && events[i].id != events[i-1].id {
return true
}
}
if len(events) > 1 {
if (2*math.Pi-events[len(events)-1].angle)+events[0].angle < 1e-11 && events[0].id != events[len(events)-1].id {
return true
}
}
for _, ev := range events {
if inStack[ev.id] != inStackIter {
inStack[ev.id] = inStackIter
stack = append(stack, ev.id)
} else {
if len(stack) == 0 || stack[len(stack)-1] != ev.id {
return true
}
stack = stack[:len(stack)-1]
}
}
return false
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
buf := make([]byte, 1024*1024)
scanner.Buffer(buf, 1024*1024)
scanner.Split(bufio.ScanWords)
scanFloat := func() float64 {
scanner.Scan()
f, _ := strconv.ParseFloat(scanner.Text(), 64)
return f
}
if !scanner.Scan() {
return
}
n, _ := strconv.Atoi(scanner.Text())
a := scanFloat()
outposts := make([]Point, n)
for i := 0; i < n; i++ {
outposts[i].x = scanFloat()
outposts[i].y = scanFloat()
}
events = make([]Event, 0, 2*n)
stack = make([]int, 0, n)
inStack = make([]int, n)
inStackIter = 0
low := 0.0
high := 2.0 * a
for iter := 0; iter < 80; iter++ {
mid := (low + high) / 2.0
if check(mid, a, outposts) {
high = mid
} else {
low = mid
}
}
fmt.Printf("%.9f\n", high)
}