← Home
For problem statement at 0-999/600-699/640-649/643/problemF.txt this is a correct solution, but verifier at 0-999/600-699/640-649/643/verifierF.go ends with case 1 failed: expected 2192091410 got 4128530002
input:
59 20 9
exit status 1 can you fix the verifier? package main

import (
	"fmt"
	"io"
	"os"
)

func gcd(a, b uint32) uint32 {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func readUint32(b []byte, idx int) (uint32, int) {
	var res uint32
	for idx < len(b) && (b[idx] < '0' || b[idx] > '9') {
		idx++
	}
	for idx < len(b) && b[idx] >= '0' && b[idx] <= '9' {
		res = res*10 + uint32(b[idx]-'0')
		idx++
	}
	return res, idx
}

func main() {
	b, _ := io.ReadAll(os.Stdin)
	var n, p, q uint32
	idx := 0
	n, idx = readUint32(b, idx)
	p, idx = readUint32(b, idx)
	q, idx = readUint32(b, idx)

	k := p
	if n-1 < k {
		k = n - 1
	}

	C := make([]uint32, k+1)
	C[0] = 1
	for j := uint32(1); j <= k; j++ {
		num := make([]uint32, j)
		for m := uint32(0); m < j; m++ {
			num[m] = n - m
		}
		for m := uint32(1); m <= j; m++ {
			div := m
			for x := uint32(0); x < j && div > 1; x++ {
				g := gcd(num[x], div)
				num[x] /= g
				div /= g
			}
		}
		var res uint32 = 1
		for x := uint32(0); x < j; x++ {
			res *= num[x]
		}
		C[j] = res
	}

	var ans uint32
	for i := uint32(1); i <= q; i++ {
		Ri := C[k]
		for j := int(k) - 1; j >= 0; j-- {
			Ri = Ri*i + C[j]
		}
		ans ^= Ri * i
	}

	fmt.Println(ans)
}