For problem statement at 0-999/800-899/830-839/833/problemC.txt this is a correct solution, but verifier at 0-999/800-899/830-839/833/verifierC.go ends with All tests passed can you fix the verifier? package main
import (
"fmt"
)
var R_arr [18]int
var L, R_val int64
var ans int64
var counts [10]int
func getMax(C *[10]int, R *[18]int) int64 {
rem := *C
matchLen := 0
for i := 0; i < 18; i++ {
if rem[R[i]] > 0 {
rem[R[i]]--
matchLen++
} else {
break
}
}
if matchLen == 18 {
var val int64 = 0
for i := 0; i < 18; i++ {
val = val*10 + int64(R[i])
}
return val
}
for div := matchLen; div >= 0; div-- {
r := *C
for i := 0; i < div; i++ {
r[R[i]]--
}
best_d := -1
for d := R[div] - 1; d >= 0; d-- {
if r[d] > 0 {
best_d = d
break
}
}
if best_d != -1 {
var val int64 = 0
for i := 0; i < div; i++ {
val = val*10 + int64(R[i])
}
val = val*10 + int64(best_d)
r[best_d]--
for d := 9; d >= 0; d-- {
for r[d] > 0 {
val = val*10 + int64(d)
r[d]--
}
}
return val
}
}
return -1
}
func generate(digit int, currentSize int, minVal int64) {
if minVal > R_val {
return
}
if digit == 10 {
if currentSize > 0 {
var fullCounts [10]int
copy(fullCounts[1:], counts[1:])
fullCounts[0] = 18 - currentSize
maxVal := getMax(&fullCounts, &R_arr)
if maxVal >= L {
ans++
}
}
return
}
maxPick := 18 - currentSize
generate(digit+1, currentSize, minVal)
currMinVal := minVal
for i := 1; i <= maxPick; i++ {
currMinVal = currMinVal*10 + int64(digit)
if currMinVal > R_val {
break
}
counts[digit] = i
generate(digit+1, currentSize+i, currMinVal)
}
counts[digit] = 0
}
func main() {
var R_input int64
if _, err := fmt.Scan(&L, &R_input); err != nil {
return
}
if R_input == 1000000000000000000 {
R_val = 999999999999999999
if L > 100000000000000000 {
ans++
}
} else {
R_val = R_input
}
temp := R_val
for i := 17; i >= 0; i-- {
R_arr[i] = int(temp % 10)
temp /= 10
}
generate(1, 0, 0)
fmt.Println(ans)
}