← Home
For problem statement at 1000-1999/1100-1199/1120-1129/1120/problemB.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1120-1129/1120/verifierB.go ends with reference runtime error: exec: "ref1120B.bin": executable file not found in $PATH can you fix the verifier? package main

import (
	"io"
	"os"
	"strconv"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	pos := 0
	next := func() string {
		for pos < len(data) && data[pos] <= ' ' {
			pos++
		}
		start := pos
		for pos < len(data) && data[pos] > ' ' {
			pos++
		}
		return string(data[start:pos])
	}

	n64, _ := strconv.ParseInt(next(), 10, 64)
	n := int(n64)
	a := next()
	bs := next()

	d := make([]int, n+1)
	b := make([]int, n+1)
	for i := 1; i <= n; i++ {
		d[i] = int(a[i-1] - '0')
		b[i] = int(bs[i-1] - '0')
	}

	m := n - 1
	rem := make([]int64, n)
	rem[1] = int64(b[1] - d[1])
	for i := 2; i <= m; i++ {
		rem[i] = int64(b[i]-d[i]) - rem[i-1]
	}
	if rem[m] != int64(b[n]-d[n]) {
		os.Stdout.Write([]byte("-1"))
		return
	}

	var c int64
	for i := 1; i <= m; i++ {
		if rem[i] < 0 {
			c -= rem[i]
		} else {
			c += rem[i]
		}
	}

	limit := c
	if limit > 100000 {
		limit = 100000
	}

	out := make([]byte, 0, 32+int(limit)*12)
	out = strconv.AppendInt(out, c, 10)
	out = append(out, '\n')

	if limit == 0 {
		os.Stdout.Write(out)
		return
	}

	ptr := 1
	var printed int64
	stack := make([]int, 0, n)

outer:
	for printed < limit {
		for ptr <= m && rem[ptr] == 0 {
			ptr++
		}
		if ptr > m {
			break
		}

		stack = stack[:0]
		cur := ptr
		for {
			if rem[cur] > 0 {
				if d[cur+1] == 9 {
					stack = append(stack, cur)
					cur++
					continue
				}
			} else {
				if d[cur+1] == 0 {
					stack = append(stack, cur)
					cur++
					continue
				}
			}
			break
		}

		if rem[cur] > 0 {
			d[cur]++
			d[cur+1]++
			rem[cur]--
			out = strconv.AppendInt(out, int64(cur), 10)
			out = append(out, ' ', '1', '\n')
		} else {
			d[cur]--
			d[cur+1]--
			rem[cur]++
			out = strconv.AppendInt(out, int64(cur), 10)
			out = append(out, ' ', '-', '1', '\n')
		}
		printed++
		if printed >= limit {
			break
		}

		for k := len(stack) - 1; k >= 0; k-- {
			idx := stack[k]
			if rem[idx] > 0 {
				d[idx]++
				d[idx+1]++
				rem[idx]--
				out = strconv.AppendInt(out, int64(idx), 10)
				out = append(out, ' ', '1', '\n')
			} else {
				d[idx]--
				d[idx+1]--
				rem[idx]++
				out = strconv.AppendInt(out, int64(idx), 10)
				out = append(out, ' ', '-', '1', '\n')
			}
			printed++
			if printed >= limit {
				break outer
			}
		}
	}

	os.Stdout.Write(out)
}