← Home
For problem statement at 0-999/0-99/30-39/37/problemC.txt this is a correct solution, but verifier at 0-999/0-99/30-39/37/verifierC.go ends with All tests passed can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

type Item struct {
	id   int
	l    int
	code []byte
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}
	items := make([]Item, n)
	for i := 0; i < n; i++ {
		items[i].id = i
		fmt.Fscan(in, &items[i].l)
	}

	sort.Slice(items, func(i, j int) bool {
		return items[i].l < items[j].l
	})

	for i := 0; i < n; i++ {
		if i == 0 {
			items[i].code = make([]byte, items[i].l)
			for j := 0; j < items[i].l; j++ {
				items[i].code[j] = '0'
			}
		} else {
			prev := items[i-1].code
			pos := -1
			for j := len(prev) - 1; j >= 0; j-- {
				if prev[j] == '0' {
					pos = j
					break
				}
			}
			if pos == -1 {
				fmt.Println("NO")
				return
			}
			curr := make([]byte, items[i].l)
			for j := 0; j < pos; j++ {
				curr[j] = prev[j]
			}
			curr[pos] = '1'
			for j := pos + 1; j < items[i].l; j++ {
				curr[j] = '0'
			}
			items[i].code = curr
		}
	}

	fmt.Println("YES")
	sort.Slice(items, func(i, j int) bool {
		return items[i].id < items[j].id
	})
	out := bufio.NewWriter(os.Stdout)
	for i := 0; i < n; i++ {
		out.WriteString(string(items[i].code) + "\n")
	}
	out.Flush()
}