← Home
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()
}