結果
問題 | No.823 Many Shifts Easy |
ユーザー |
![]() |
提出日時 | 2022-11-03 11:44:00 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 118 ms / 2,000 ms |
コード長 | 1,732 bytes |
コンパイル時間 | 249 ms |
コンパイル使用メモリ | 82,464 KB |
実行使用メモリ | 91,808 KB |
最終ジャッジ日時 | 2024-07-17 21:51:07 |
合計ジャッジ時間 | 1,665 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
ソースコード
import sysimport itertoolsimport heapqimport bisectfrom collections import deque, defaultdictfrom functools import lru_cache, cmp_to_keyinput = sys.stdin.readline# for AtCoder Easy testif __file__ != 'prog.py':sys.setrecursionlimit(10 ** 6)def readints(): return map(int, input().split())def readlist(): return list(readints())def readstr(): return input().rstrip()class Combination:def __init__(self, N, mod):self.N = Nself.mod = modself.f = [None] * (N + 1)self.finv = [None] * (N + 1)self.inv = [None] * (N + 1)self.f[0] = 1self.f[1] = 1self.finv[0] = 1self.finv[1] = 1self.inv[1] = 1for i in range(2, N + 1):self.f[i] = self.f[i - 1] * i % self.modself.inv[i] = self.mod - self.inv[self.mod % i] * (self.mod // i) % self.modself.finv[i] = self.finv[i - 1] * self.inv[i] % self.moddef P(self, n, k):if n < k:return 0if n < 0 or k < 0:return 0return self.f[n] * self.finv[n - k] % self.moddef C(self, n, k):if n < k:return 0if n < 0 or k < 0:return 0return self.f[n] * (self.finv[k] * self.finv[n - k] % self.mod) % self.mod# 重複組合せ# n種類のものからk個選ぶdef H(self, n, k):if n == 0 and k == 0:return 1return self.C(k + n - 1, k)N, K = readints()mod = 10 ** 9 + 7comb = Combination(N, mod)ans = 0for i in range(N):ans += (i + 1) * comb.P(N - 1, K) % modif i < N - 1:ans += (i + 1) * comb.P(N - 2, K - 2) * comb.C(K, 2) % modans %= modprint(ans)