For problem statement at 0-999/300-399/350-359/354/problemE.txt this is a correct solution, but verifier at 0-999/300-399/350-359/354/verifierE.go ends with case 1 failed on line 1: expected 0 40000040000 40000044004 40440444004 74444444044 77447474774 got 40404444704 40407000704 40407000704 40407000707 40707000007 70000000000
input:
4
272332446826
854592229752
746127945894
818711508695
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
type Transition struct {
next int
a int
b int
}
type Parent struct {
prev int
a int
b int
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var trans [5][10][]Transition
for cin := 0; cin <= 4; cin++ {
for a := 0; a <= 6; a++ {
for b := 0; a+b <= 6; b++ {
total := 4*a + 7*b + cin
d := total % 10
cout := total / 10
trans[cin][d] = append(trans[cin][d], Transition{cout, a, b})
}
}
}
var pow10 [19]int64
pow10[0] = 1
for i := 1; i < 19; i++ {
pow10[i] = pow10[i-1] * 10
}
var t int
fmt.Fscan(in, &t)
for ; t > 0; t-- {
var n int64
fmt.Fscan(in, &n)
digits := make([]int, 0, 19)
x := n
if x == 0 {
digits = append(digits, 0)
} else {
for x > 0 {
digits = append(digits, int(x%10))
x /= 10
}
}
m := len(digits)
parent := make([][5]Parent, m+1)
cur := [5]bool{}
cur[0] = true
for pos := 0; pos < m; pos++ {
d := digits[pos]
nxt := [5]bool{}
for cin := 0; cin <= 4; cin++ {
if !cur[cin] {
continue
}
for _, tr := range trans[cin][d] {
if !nxt[tr.next] {
nxt[tr.next] = true
parent[pos+1][tr.next] = Parent{cin, tr.a, tr.b}
}
}
}
cur = nxt
}
if !cur[0] {
fmt.Fprintln(out, -1)
continue
}
aCnt := make([]int, m)
bCnt := make([]int, m)
carry := 0
for pos := m; pos >= 1; pos-- {
p := parent[pos][carry]
aCnt[pos-1] = p.a
bCnt[pos-1] = p.b
carry = p.prev
}
var nums [6]int64
for pos := 0; pos < m; pos++ {
pw := pow10[pos]
a := aCnt[pos]
b := bCnt[pos]
for i := 0; i < a; i++ {
nums[i] += 4 * pw
}
for i := a; i < a+b; i++ {
nums[i] += 7 * pw
}
}
for i := 0; i < 6; i++ {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, nums[i])
}
fmt.Fprintln(out)
}
}