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 |
|
|
| 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 |