結果
問題 | No.1785 Inequality Signs |
ユーザー | lloyz |
提出日時 | 2021-12-20 00:14:42 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 464 ms / 2,000 ms |
コード長 | 1,017 bytes |
コンパイル時間 | 375 ms |
コンパイル使用メモリ | 81,980 KB |
実行使用メモリ | 82,688 KB |
最終ジャッジ日時 | 2024-09-15 15:04:28 |
合計ジャッジ時間 | 12,522 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 52 |
ソースコード
n, k = map(int, input().split()) mod = 10**9 + 7 # nは任意の数に置き換え可能 fact = [1] * (n + 1) inv = [1] * (n + 1) finv = [1] * (n + 1) for i in range(2, n + 1): fact[i] = fact[i - 1] * i % mod inv[i] = mod - inv[mod % i] * (mod // i) % mod finv[i] = finv[i - 1] * inv[i] % mod def comb(a, b): return fact[a] * finv[b] * finv[a - b] % mod def extgcd(a, b): if b != 0: d, y, x = extgcd(b, a % b) y -= (a // b) * x return d, x, y return a, 1, 0 def inverse(a, m): d, x, _ = extgcd(a, m) if d != 1: return -1 return x % m ans = 0 cnt = 1 if k >= n: for i in range(1, n + 1): cnt *= k - i + 1 cnt *= inv[i] cnt %= mod ans += cnt for i in range(1, n): if k + i > n: cnt *= k + i cnt *= inverse(k + i - n, mod) cnt %= mod ans += cnt * comb(n - 1, i) % mod ans %= mod elif k + i == n: ans += cnt * comb(n - 1, i) % mod ans %= mod print(ans)