結果
| 問題 |
No.420 mod2漸化式
|
| コンテスト | |
| ユーザー |
fmhr
|
| 提出日時 | 2016-09-10 14:57:52 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 200 ms / 1,000 ms |
| コード長 | 1,374 bytes |
| コンパイル時間 | 16,063 ms |
| コンパイル使用メモリ | 223,688 KB |
| 実行使用メモリ | 48,512 KB |
| 最終ジャッジ日時 | 2024-12-24 11:30:23 |
| 合計ジャッジ時間 | 21,924 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 35 |
ソースコード
package main
import "fmt"
func main() {
var x int
fmt.Scan(&x)
getFactInv()
fmt.Println(c(31, x), 2147483647*c(30, x-1))
}
const MAX = 2000010
var MOD int = 1000000007 // 素数
var fact [MAX]int // 階乗
var factInv [MAX]int // 階乗の逆元
var inv [MAX]int
func getFactInv() {
// 最初に一度だけ実行
inv[1], fact[0], factInv[0] = 1, 1, 1
// nHkはn+k+1Ckとなるためn+kをとる
var i int
for i = 2; i < MAX; i++ {
inv[i] = inv[MOD%i] * (MOD - MOD/i) % MOD
}
for i = 1; i < MAX; i++ {
fact[i] = fact[i-1] * i % MOD
factInv[i] = factInv[i-1] * inv[i] % MOD
}
}
// 1 以上 N 以下の N 個の整数の中から,相異なる K 個の整数を選ぶパターンの数を C(N,K) と書きます.
func c(n, k int) int {
if k < 0 || k > n {
return 0
}
return fact[n] * factInv[k] % MOD * factInv[n-k] % MOD
}
// 1 以上 N 以下の N 個の整数の中から,相異なる K 個の整数を選び,順番に並べるパターンの数を P(N,K) と書きます.
func p(n, k int) int {
if k < 0 || k > n {
return 0
}
return fact[n] * factInv[n-k] % MOD
}
// 1 以上 N 以下の N 個の整数の中から,重複を許して K 個の整数を選ぶパターンの数を H(N,K) と書きます.
func h(n, k int) int {
if n == 0 && k == 0 {
return 1
}
if n == 0 {
return 0
}
return c(n+k-1, k)
}
fmhr