← Home
For problem statement at 0-999/300-399/320-329/324/problemC1.txt this is a correct solution, but verifier at 0-999/300-399/320-329/324/verifierC1.go ends with All 268 tests passed.

validated 10/268 tests...
validated 20/268 tests...
validated 30/268 tests...
validated 40/268 tests...
validated 50/268 tests...
validated 60/268 tests...
validated 70/268 tests...
validated 80/268 tests...
validated 90/268 tests...
validated 100/268 tests...
validated 110/268 tests...
validated 120/268 tests...
validated 130/268 tests...
validated 140/268 tests...
validated 150/268 tests...
validated 160/268 tests...
validated 170/268 tests...
validated 180/268 tests...
validated 190/268 tests...
validated 200/268 tests...
validated 210/268 tests...
validated 220/268 tests...
validated 230/268 tests...
validated 240/268 tests...
validated 250/268 tests...
validated 260/268 tests... can you fix the verifier? ```go
package main

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

const (
	States = 9
	Masks  = 1 << 9
	MaxK   = 18
	INF    int64 = 1 << 62
)

type Matrix struct {
	a [States * States]int64
}

func identity() Matrix {
	var m Matrix
	for i := 0; i < States*States; i++ {
		m.a[i] = INF
	}
	for i := 0; i < States; i++ {
		m.a[i*States+i] = 0
	}
	return m
}

func multiply(x, y Matrix) Matrix {
	var z Matrix
	for i := 0; i < States*States; i++ {
		z.a[i] = INF
	}
	for i := 0; i < States; i++ {
		ib := i * States
		for k := 0; k < States; k++ {
			xv := x.a[ib+k]
			if xv >= INF {
				continue
			}
			kb := k * States
			for j := 0; j < States; j++ {
				yv := y.a[kb+j]
				if yv >= INF {
					continue
				}
				v := xv + yv
				idx := ib + j
				if v < z.a[idx] {
					z.a[idx] = v
				}
			}
		}
	}
	return z
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var s string
	fmt.Fscan(in, &s)

	ident := identity()

	var base [Masks]Matrix
	base[0] = ident
	for mask := 1; mask < Masks; mask++ {
		var m Matrix
		for i := 0; i < States*States; i++ {
			m.a[i] = INF
		}
		for d := 1; d <= 9; d++ {
			if mask&(1<<(d-1)) != 0 {
				m.a[d-1] = 1
			}
		}
		for i := 1; i < States; i++ {
			m.a[i*States+(i-1)] = 0
		}
		base[mask] = m
	}

	var nextMask [Masks][10]int
	for mask := 0; mask < Masks; mask++ {
		nextMask[mask][0] = mask
		for d := 1; d <= 9; d++ {
			nextMask[mask][d] = mask | (1 << (d - 1))
		}
	}

	var dp [MaxK + 1][Masks]Matrix
	for mask := 0; mask < Masks; mask++ {
		dp[0][mask] = base[mask]
	}
	for k := 1; k <= MaxK; k++ {
		for mask := 0; mask < Masks; mask++ {
			res := ident
			for d := 0; d <= 9; d++ {
				res = multiply(dp[k-1][nextMask[mask][d]], res)
			}
			dp[k][mask] = res
		}
	}

	res := ident
	mask := 0
	n := len(s)
	for i := 0; i < n; i++ {
		cur := int(s[i] - '0')
		rem := n - i - 1
		for d := 0; d < cur; d++ {
			res = multiply(dp[rem][nextMask[mask][d]], res)
		}
		mask = nextMask[mask][cur]
	}
	res = multiply(base[mask], res)

	out := bufio.NewWriter(os.Stdout)
	fmt.Fprintln(out, res.a[0])
	out.Flush()
}
```