For problem statement at 1000-1999/1000-1099/1060-1069/1063/problemE.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1060-1069/1063/verifierE.go ends with case 1 failed: expected 1
//
.. got 1
..
//
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
var n int
fmt.Fscan(in, &n)
a := make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscan(in, &a[i])
a[i]--
}
vis := make([]bool, n)
selected := make([]bool, n)
height := make([]int, n)
nonTrivialCycles := 0
h := 1
for i := 0; i < n; i++ {
if vis[i] {
continue
}
cycle := make([]int, 0)
cur := i
for !vis[cur] {
vis[cur] = true
cycle = append(cycle, cur)
cur = a[cur]
}
if len(cycle) == 1 && a[cycle[0]] == cycle[0] {
selected[cycle[0]] = true
} else {
nonTrivialCycles++
for j := 1; j < len(cycle); j++ {
selected[cycle[j]] = true
}
for j := len(cycle) - 1; j >= 1; j-- {
height[cycle[j]] = h
h++
}
}
}
grid := make([][]byte, n)
for i := 0; i < n; i++ {
grid[i] = make([]byte, n)
for j := 0; j < n; j++ {
grid[i][j] = '.'
}
}
for i := 0; i < n; i++ {
if !selected[i] || a[i] == i {
continue
}
row := n - height[i]
if a[i] > i {
grid[row][i] = '\\'
grid[row][a[i]] = '\\'
} else {
grid[row][i] = '/'
grid[row][a[i]] = '/'
}
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
fmt.Fprintln(out, n-nonTrivialCycles)
for i := 0; i < n; i++ {
fmt.Fprintln(out, string(grid[i]))
}
out.Flush()
}