Submission #67827821


Source Code Expand

// Node.jsでの標準入力処理 + 組み合わせ計算(mod 1e9+7対応)
const fs = require('fs');

const MOD = 1000000007n; // ModuloをBigIntで定義
const MAX = 200000; // 最大 (H+W-2) まで対応

// BigInt階乗・逆元の配列
const fact = Array(MAX + 1);
const invFact = Array(MAX + 1);

/**
 * 累乗計算(a^b % MOD)
 * @param {bigint} base 底
 * @param {bigint} exp 指数
 * @returns {bigint} base^exp % MOD
 */
function modPow(base, exp) {
  let result = 1n;
  base %= MOD;
  while (exp > 0) {
    if (exp % 2n === 1n) result = result * base % MOD;
    base = base * base % MOD;
    exp >>= 1n;
  }
  return result;
}

/**
 * 前計算: fact[], invFact[] を埋める
 */
function precomputeFactorials() {
  fact[0] = 1n;
  for (let i = 1; i <= MAX; i++) {
    fact[i] = fact[i - 1] * BigInt(i) % MOD;
  }
  invFact[MAX] = modPow(fact[MAX], MOD - 2n);
  for (let i = MAX - 1; i >= 0; i--) {
    invFact[i] = invFact[i + 1] * BigInt(i + 1) % MOD;
  }
}

/**
 * nCr % MOD を計算する
 * @param {number} n
 * @param {number} r
 * @returns {bigint}
 */
function comb(n, r) {
  if (r < 0 || r > n) return 0n;
  return fact[n] * invFact[r] % MOD * invFact[n - r] % MOD;
}

// 入力読み取りと出力処理
function main(input) {
  const [H, W] = input.trim().split(' ').map(Number);
  precomputeFactorials(); // 階乗と逆元の前計算
  const totalSteps = H + W - 2;
  const downSteps = H - 1;
  const answer = comb(totalSteps, downSteps);
  console.log(answer.toString()); // bigint を string にして出力
}

// 標準入力から読み込んで実行
main(fs.readFileSync('/dev/stdin', 'utf8'));

Submission Info

Submission Time
Task B30 - Combination 2
User myoshizumi
Language JavaScript (Node.js 18.16.1)
Score 1000
Code Size 1703 Byte
Status AC
Exec Time 158 ms
Memory 73836 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 3
AC × 11
Set Name Test Cases
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
Case Name Status Exec Time Memory
sample_01.txt AC 158 ms 73664 KiB
sample_02.txt AC 123 ms 73732 KiB
sample_03.txt AC 123 ms 73808 KiB
test_01.txt AC 124 ms 73780 KiB
test_02.txt AC 122 ms 73672 KiB
test_03.txt AC 123 ms 73668 KiB
test_04.txt AC 121 ms 73712 KiB
test_05.txt AC 124 ms 73816 KiB
test_06.txt AC 123 ms 73792 KiB
test_07.txt AC 124 ms 73804 KiB
test_08.txt AC 124 ms 73836 KiB