For problem statement at 1000-1999/1300-1399/1370-1379/1379/problemD.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1370-1379/1379/verifierD.go ends with case 2 failed: expected "0 8" got "0 5"
input:
1 1 20 7
0 8
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"sort"
)
type Event struct {
t int
val int
}
func main() {
reader := bufio.NewReader(os.Stdin)
var n, h, m, k int
if _, err := fmt.Fscan(reader, &n, &h, &m, &k); err != nil {
return
}
H := m / 2
x := make([]int, n)
events := make([]Event, 0, 2*n+1)
events = append(events, Event{0, 0})
for i := 0; i < n; i++ {
var hi, mi int
fmt.Fscan(reader, &hi, &mi)
xi := mi % H
x[i] = xi
if k == 1 {
continue
}
if xi+1 < H {
if xi+k <= H {
events = append(events, Event{xi + 1, 1})
events = append(events, Event{xi + k, -1})
} else {
events = append(events, Event{xi + 1, 1})
events = append(events, Event{0, 1})
events = append(events, Event{xi + k - H, -1})
}
} else {
events = append(events, Event{0, 1})
events = append(events, Event{k - 1, -1})
}
}
sort.Slice(events, func(i, j int) bool {
return events[i].t < events[j].t
})
var merged []Event
for _, e := range events {
if e.t >= H {
continue
}
if len(merged) > 0 && merged[len(merged)-1].t == e.t {
merged[len(merged)-1].val += e.val
} else {
merged = append(merged, e)
}
}
minCanceled := n + 1
optT := 0
curr := 0
for _, e := range merged {
curr += e.val
if curr < minCanceled {
minCanceled = curr
optT = e.t
}
}
if minCanceled == n+1 {
minCanceled = 0
}
fmt.Println(minCanceled, optT)
if minCanceled > 0 {
var canceled []int
for i := 0; i < n; i++ {
xi := x[i]
if k == 1 {
continue
}
start := (xi + 1) % H
end := (xi + k - 1) % H
isCanceled := false
if start <= end {
isCanceled = (optT >= start && optT <= end)
} else {
isCanceled = (optT >= start || optT <= end)
}
if isCanceled {
canceled = append(canceled, i+1)
}
}
for i, idx := range canceled {
if i > 0 {
fmt.Print(" ")
}
fmt.Print(idx)
}
fmt.Println()
} else {
fmt.Println()
}
}