← Home
For problem statement at 0-999/100-199/180-189/185/problemC.txt this is a correct solution, but verifier at 0-999/100-199/180-189/185/verifierC.go ends with case 24 failed: expected Cerealguy got Fat Rat
input:
4
15 5 16 15
17 17 4 17
7 6 10
11 4
19
exit status 1 can you fix the verifier? package main

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	readInt := func() int {
		scanner.Scan()
		val, _ := strconv.Atoi(scanner.Text())
		return val
	}

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())

	a := make([]int, n+1)
	for i := 1; i <= n; i++ {
		a[i] = readInt()
	}

	w := make([][]int, n+1)
	for i := 1; i <= n; i++ {
		w[i] = make([]int, n-i+2)
		for k := 1; k <= n-i+1; k++ {
			w[i][k] = readInt()
		}
	}

	flat := make([]int, 52*52*52*52)
	dp := make([][][][]int, 52)
	for i := range dp {
		dp[i] = make([][][]int, 52)
		for j := range dp[i] {
			dp[i][j] = make([][]int, 52)
			for k := range dp[i][j] {
				dp[i][j][k] = flat[(((i*52+j)*52)+k)*52 : (((i*52+j)*52)+k+1)*52]
			}
		}
	}

	for k := 1; k <= n; k++ {
		dp[1][k][k][k] = a[k]
	}

	for i := 2; i <= n; i++ {
		for k := 1; k <= n-i+1; k++ {
			for len_ := 1; len_ <= i; len_++ {
				for L := k; L <= k+i-1-len_+1; L++ {
					R := L + len_ - 1
					val := 0

					if R <= k+i-2 {
						if dp[i-1][k][L][R] >= w[i-1][k] {
							if dp[i-1][k][L][R] > val {
								val = dp[i-1][k][L][R]
							}
						}
					}

					if L >= k+1 {
						if dp[i-1][k+1][L][R] >= w[i-1][k+1] {
							if dp[i-1][k+1][L][R] > val {
								val = dp[i-1][k+1][L][R]
							}
						}
					}

					for mid := L; mid < R; mid++ {
						m1 := dp[i-1][k][L][mid]
						m2 := dp[i-1][k+1][mid+1][R]
						if m1 >= w[i-1][k] && m2 >= w[i-1][k+1] {
							if m1+m2 > val {
								val = m1 + m2
							}
						}
					}

					if L < R {
						if dp[i][k][L+1][R] > val {
							val = dp[i][k][L+1][R]
						}
						if dp[i][k][L][R-1] > val {
							val = dp[i][k][L][R-1]
						}
					}

					dp[i][k][L][R] = val
				}
			}
		}
	}

	if dp[n][1][1][n] >= w[n][1] {
		fmt.Println("Cerealguy")
	} else {
		fmt.Println("Fat Rat")
	}
}