← Home
For problem statement at 1000-1999/1700-1799/1710-1719/1710/problemC.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1710-1719/1710/verifierC.go ends with All tests passed can you fix the verifier? package main

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

func main() {
	reader := bufio.NewReaderSize(os.Stdin, 1024*1024)
	nStr, err := reader.ReadString('\n')
	if err != nil && err.Error() != "EOF" {
		return
	}
	nStr = strings.TrimSpace(nStr)
	if len(nStr) == 0 {
		return
	}

	MOD := int64(998244353)

	var N int64 = 0
	for i := 0; i < len(nStr); i++ {
		N = (N*2 + int64(nStr[i]-'0')) % MOD
	}
	N = (N + 1) % MOD

	var dp [8]int64
	dp[0] = 1

	comboA := [6]int{0, 0, 0, 1, 1, 1}
	comboB := [6]int{0, 0, 1, 0, 1, 1}
	comboC := [6]int{0, 1, 1, 0, 0, 1}

	for i := 0; i < len(nStr); i++ {
		n_i := int(nStr[i] - '0')
		var nextDp [8]int64

		for state := 0; state < 8; state++ {
			if dp[state] == 0 {
				continue
			}
			la := (state >> 2) & 1
			lb := (state >> 1) & 1
			lc := state & 1

			for j := 0; j < 6; j++ {
				a := comboA[j]
				b := comboB[j]
				c := comboC[j]

				if la == 0 && a > n_i {
					continue
				}
				if lb == 0 && b > n_i {
					continue
				}
				if lc == 0 && c > n_i {
					continue
				}

				nla := la
				if a < n_i {
					nla = 1
				}
				nlb := lb
				if b < n_i {
					nlb = 1
				}
				nlc := lc
				if c < n_i {
					nlc = 1
				}

				nstate := (nla << 2) | (nlb << 1) | nlc
				nextDp[nstate] += dp[state]
				if nextDp[nstate] >= MOD {
					nextDp[nstate] -= MOD
				}
			}
		}
		dp = nextDp
	}

	var S int64 = 0
	for state := 0; state < 8; state++ {
		S += dp[state]
	}
	S %= MOD

	part1 := (N * N % MOD) * N % MOD
	part2 := (3 * S) % MOD
	part3 := (3 * N % MOD) * N % MOD

	ans := (part1 - part2 + part3 - N) % MOD
	if ans < 0 {
		ans += MOD
	}

	fmt.Println(ans)
}