For problem statement at 0-999/400-499/440-449/444/problemD.txt this is a correct solution, but verifier at 0-999/400-499/440-449/444/verifierD.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"os"
"strconv"
)
func getID(s string) int {
id := 0
for i := 0; i < len(s); i++ {
id = id*27 + int(s[i]-'a'+1)
}
return id
}
func search(a []int, x int) int {
l, r := 0, len(a)
for l < r {
m := l + (r-l)/2
if a[m] < x {
l = m + 1
} else {
r = m
}
}
return l
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
buf := make([]byte, 1000000)
scanner.Buffer(buf, 1000000)
if !scanner.Scan() {
return
}
s := scanner.Text()
if !scanner.Scan() {
return
}
q, _ := strconv.Atoi(scanner.Text())
pos := make([][]int, 531442)
n := len(s)
for i := 0; i < n; i++ {
id := 0
for j := 0; j < 4 && i+j < n; j++ {
id = id*27 + int(s[i+j]-'a'+1)
pos[id] = append(pos[id], i)
}
}
memo := make(map[uint64]int)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
for k := 0; k < q; k++ {
if !scanner.Scan() {
break
}
a := scanner.Text()
if !scanner.Scan() {
break
}
b := scanner.Text()
idA := getID(a)
idB := getID(b)
if len(pos[idA]) == 0 || len(pos[idB]) == 0 {
writer.WriteString("-1\n")
continue
}
if idA == idB {
writer.WriteString(strconv.Itoa(len(a)) + "\n")
continue
}
key := (uint64(idA) << 32) | uint64(idB)
if val, ok := memo[key]; ok {
writer.WriteString(strconv.Itoa(val) + "\n")
continue
}
arrA := pos[idA]
arrB := pos[idB]
lenA := len(a)
lenB := len(b)
if len(arrA) > len(arrB) {
arrA, arrB = arrB, arrA
lenA, lenB = lenB, lenA
}
ans := 1000000000
for _, u := range arrA {
idx := search(arrB, u)
if idx > 0 {
v := arrB[idx-1]
end := u + lenA
if v+lenB > end {
end = v + lenB
}
start := u
if v < start {
start = v
}
if end-start < ans {
ans = end - start
}
}
if idx < len(arrB) {
v := arrB[idx]
end := u + lenA
if v+lenB > end {
end = v + lenB
}
start := u
if v < start {
start = v
}
if end-start < ans {
ans = end - start
}
}
}
memo[key] = ans
writer.WriteString(strconv.Itoa(ans) + "\n")
}
}