For problem statement at 1000-1999/1600-1699/1680-1689/1685/problemD1.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1680-1689/1685/verifierD1.go ends with case 1 failed
input:
1
6
1 4 5 2 6 3
expected:6 5 3 4 2 1
actual:1 4 2 6 5 3
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var t int
fmt.Fscan(in, &t)
for ; t > 0; t-- {
var n int
fmt.Fscan(in, &n)
p := make([]int, n+1)
inv := make([]int, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(in, &p[i])
inv[p[i]] = i
}
cycleID := make([]int, n+1)
vis := make([]bool, n+1)
cycles := 0
for i := 1; i <= n; i++ {
if vis[i] {
continue
}
cycles++
cur := i
for !vis[cur] {
vis[cur] = true
cycleID[cur] = cycles
cur = p[cur]
}
}
cnt := make([]int, cycles+1)
have := 0
l := 1
bestL, bestR := 1, n
for r := 1; r <= n; r++ {
c := cycleID[r]
if cnt[c] == 0 {
have++
}
cnt[c]++
for have == cycles {
if r-l < bestR-bestL {
bestL, bestR = l, r
}
c2 := cycleID[l]
cnt[c2]--
if cnt[c2] == 0 {
have--
}
l++
}
}
rep := make([]int, cycles+1)
reps := make([]int, 0, cycles)
for x := bestL; x <= bestR; x++ {
c := cycleID[x]
if rep[c] == 0 {
rep[c] = x
reps = append(reps, x)
}
}
ans := make([]int, 0, n)
for _, y := range reps {
cur := inv[y]
for {
ans = append(ans, cur)
if cur == y {
break
}
cur = inv[cur]
}
}
for i, v := range ans {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, v)
}
fmt.Fprintln(out)
}
}