提出 #67828468


ソースコード 拡げる

package main

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

const MOD int64 = 1_000_000_007
const MAX int = 200000 // H + W の最大値に余裕を持たせる

var fact = make([]int64, MAX+1)
var invFact = make([]int64, MAX+1)

/**
 * powMod は base^exp を MOD で割った値を返す
 * @param base int64 底
 * @param exp int64 指数
 * @return int64 base^exp % MOD
 */
func powMod(base, exp int64) int64 {
	result := int64(1)
	base %= MOD
	for exp > 0 {
		if exp%2 == 1 {
			result = (result * base) % MOD
		}
		base = (base * base) % MOD
		exp >>= 1
	}
	return result
}

/**
 * precomputeFactorials は fact[], invFact[] を前計算する
 */
func precomputeFactorials() {
	fact[0] = 1
	for i := 1; i <= MAX; i++ {
		fact[i] = fact[i-1] * int64(i) % MOD
	}
	invFact[MAX] = powMod(fact[MAX], MOD-2)
	for i := MAX - 1; i >= 0; i-- {
		invFact[i] = invFact[i+1] * int64(i+1) % MOD
	}
}

/**
 * combination は nCr (mod MOD) を返す
 * @param n int
 * @param r int
 * @return int64 組み合わせ値
 */
func combination(n, r int) int64 {
	if r < 0 || r > n {
		return 0
	}
	return fact[n] * invFact[r] % MOD * invFact[n-r] % MOD
}

/**
 * countGridPaths はグリッドの経路数を返す
 * @param H int 行数
 * @param W int 列数
 * @return int64 経路数(mod MOD)
 */
func countGridPaths(H, W int) int64 {
	precomputeFactorials()
	return combination(H+W-2, H-1)
}

/**
 * main は標準入力から H, W を読み取り、経路数を出力する
 */
func main() {
	reader := bufio.NewReader(os.Stdin)
	line, _ := reader.ReadString('\n')
	tokens := strings.Fields(line)

	H, _ := strconv.Atoi(tokens[0])
	W, _ := strconv.Atoi(tokens[1])

	result := countGridPaths(H, W)
	fmt.Println(result)
}

提出情報

提出日時
問題 B30 - Combination 2
ユーザ myoshizumi
言語 Go (go 1.20.6)
得点 1000
コード長 1814 Byte
結果 AC
実行時間 4 ms
メモリ 4744 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 1000 / 1000
結果
AC × 3
AC × 11
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt
ケース名 結果 実行時間 メモリ
sample_01.txt AC 4 ms 4744 KiB
sample_02.txt AC 4 ms 4744 KiB
sample_03.txt AC 4 ms 4744 KiB
test_01.txt AC 4 ms 4744 KiB
test_02.txt AC 4 ms 4740 KiB
test_03.txt AC 4 ms 4744 KiB
test_04.txt AC 4 ms 4740 KiB
test_05.txt AC 4 ms 4744 KiB
test_06.txt AC 4 ms 4740 KiB
test_07.txt AC 4 ms 4740 KiB
test_08.txt AC 4 ms 4740 KiB