For problem statement at 0-999/900-999/920-929/927/problemA.txt this is a correct solution, but verifier at 0-999/900-999/920-929/927/verifierA.go ends with test 1 failed
expected:
0
0
0
0
got:
0
1 2 2 2 3 1 4 5 -1
1 2 2 3 4 2 5 6 -2
0
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func abs(a int) int {
if a < 0 {
return -a
}
return a
}
type Dest struct {
cx, cy, a int
}
type Car struct {
x, y int
queue []Dest
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
var w, h int
fmt.Fscan(in, &w, &h)
var k int
fmt.Fscan(in, &k)
cars := make([]Car, k)
for i := 0; i < k; i++ {
fmt.Fscan(in, &cars[i].x, &cars[i].y)
}
fmt.Fprintln(out, 0)
out.Flush()
t_prev := 0
orderID := 1
for {
var t_j int
fmt.Fscan(in, &t_j)
if t_j == -1 {
var dummy int
for i := 0; i < 4; i++ {
fmt.Fscan(in, &dummy)
}
fmt.Fprintln(out, 0)
out.Flush()
break
}
var sx, sy, tx, ty int
fmt.Fscan(in, &sx, &sy, &tx, &ty)
dt := t_j - t_prev
for i := 0; i < k; i++ {
rem := dt
for len(cars[i].queue) > 0 {
dest := cars[i].queue[0]
dx := dest.cx - cars[i].x
dy := dest.cy - cars[i].y
dist := abs(dx) + abs(dy)
if rem >= dist {
rem -= dist
cars[i].x = dest.cx
cars[i].y = dest.cy
cars[i].queue = cars[i].queue[1:]
} else {
if rem > 0 {
if abs(dx) >= rem {
if dx > 0 {
cars[i].x += rem
} else {
cars[i].x -= rem
}
rem = 0
} else {
cars[i].x = dest.cx
rem -= abs(dx)
if dy > 0 {
cars[i].y += rem
} else {
cars[i].y -= rem
}
rem = 0
}
}
break
}
}
}
t_prev = t_j
bestCar := -1
minPickup := int(1e18)
for i := 0; i < k; i++ {
cx, cy := cars[i].x, cars[i].y
time_spent := 0
for _, dest := range cars[i].queue {
time_spent += abs(cx-dest.cx) + abs(cy-dest.cy)
cx = dest.cx
cy = dest.cy
}
avail := t_j + time_spent
distToPickup := abs(cx-sx) + abs(cy-sy)
pickup := avail + distToPickup
if pickup < minPickup {
minPickup = pickup
bestCar = i
}
}
cars[bestCar].queue = append(cars[bestCar].queue, Dest{sx, sy, orderID}, Dest{tx, ty, -orderID})
fmt.Fprintf(out, "1 %d %d", bestCar+1, len(cars[bestCar].queue))
for _, dest := range cars[bestCar].queue {
fmt.Fprintf(out, " %d %d %d", dest.cx, dest.cy, dest.a)
}
fmt.Fprintln(out)
out.Flush()
orderID++
}
}