← Home
For problem statement at 1000-1999/1700-1799/1700-1709/1704/problemF.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1700-1709/1704/verifierF.go ends with All 20 tests passed can you fix the verifier? package main

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

var G [1000]int

func init() {
	G[0] = 0
	G[1] = 1
	G[2] = 1
	for n := 3; n < 1000; n++ {
		seen := make([]bool, 1000)
		seen[G[n-2]] = true
		for j := 0; j <= n-3; j++ {
			seen[G[j]^G[n-3-j]] = true
		}
		for i := 0; ; i++ {
			if !seen[i] {
				G[n] = i
				break
			}
		}
	}
}

func getG(n int) int {
	if n < 1000 {
		return G[n]
	}
	return G[100+(n-100)%34]
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	buf := make([]byte, 1024*1024)
	scanner.Buffer(buf, 10*1024*1024)

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

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	for i := 0; i < t; i++ {
		scanner.Scan()
		scanner.Scan()
		s := scanner.Text()

		nR := 0
		nB := 0
		for j := 0; j < len(s); j++ {
			if s[j] == 'R' {
				nR++
			} else {
				nB++
			}
		}

		if nR > nB {
			fmt.Fprintln(out, "Alice")
			continue
		} else if nB > nR {
			fmt.Fprintln(out, "Bob")
			continue
		}

		xorSum := 0
		for j := 0; j < len(s); {
			k := j + 1
			for k < len(s) && s[k] != s[k-1] {
				k++
			}
			L := k - j
			if L >= 2 {
				E := L - 1
				xorSum ^= getG(E)
			}
			j = k
		}

		if xorSum > 0 {
			fmt.Fprintln(out, "Alice")
		} else {
			fmt.Fprintln(out, "Bob")
		}
	}
}