For problem statement at 1000-1999/1800-1899/1860-1869/1867/problemD.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1860-1869/1867/verifierD.go ends with All 100 tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
type FastScanner struct {
r *bufio.Reader
}
func NewFastScanner() *FastScanner {
return &FastScanner{r: bufio.NewReaderSize(os.Stdin, 1<<20)}
}
func (fs *FastScanner) NextInt() int {
sign := 1
val := 0
c, err := fs.r.ReadByte()
for err == nil && c <= ' ' {
c, err = fs.r.ReadByte()
}
if err != nil {
return 0
}
if c == '-' {
sign = -1
c, err = fs.r.ReadByte()
}
for err == nil && c >= '0' && c <= '9' {
val = val*10 + int(c-'0')
c, err = fs.r.ReadByte()
}
return sign * val
}
func main() {
in := NewFastScanner()
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
t := in.NextInt()
for ; t > 0; t-- {
n := in.NextInt()
k := in.NextInt()
b := make([]int, n)
hasFixed := false
for i := 0; i < n; i++ {
x := in.NextInt() - 1
b[i] = x
if k > 1 && x == i {
hasFixed = true
}
}
if k == 1 {
ok := true
for i := 0; i < n; i++ {
if b[i] != i {
ok = false
break
}
}
if ok {
fmt.Fprintln(out, "YES")
} else {
fmt.Fprintln(out, "NO")
}
continue
}
if hasFixed {
fmt.Fprintln(out, "NO")
continue
}
found := false
mark := make([]bool, n)
seen := make([]int, n)
pos := make([]int, n)
iterId := 1
for i := 0; i < n && !found; i++ {
if mark[i] {
continue
}
u := i
steps := 0
for {
if mark[u] {
break
}
if seen[u] == iterId {
cycleLen := steps - pos[u]
if cycleLen == k {
found = true
}
break
}
seen[u] = iterId
pos[u] = steps
steps++
u = b[u]
}
v := i
for {
if mark[v] {
break
}
if seen[v] != iterId {
break
}
mark[v] = true
v = b[v]
}
iterId++
}
if found {
fmt.Fprintln(out, "YES")
} else {
fmt.Fprintln(out, "NO")
}
}
}