結果
問題 | No.1127 変形パスカルの三角形 |
ユーザー |
|
提出日時 | 2022-10-20 15:44:21 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 1,120 ms / 1,500 ms |
コード長 | 2,833 bytes |
コンパイル時間 | 163 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 11,136 KB |
最終ジャッジ日時 | 2024-06-30 08:26:25 |
合計ジャッジ時間 | 21,222 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 30 |
ソースコード
from itertools import pairwisefrom math import ceilclass Modint:MOD = int(1e9+7)def __init__(self, value: int) -> None:self.num = int(value) % self.MODdef __str__(self) -> str:return str(self.num)__repr__ = __str__def __add__(self, __x):if isinstance(__x, Modint):return Modint((self.num + __x.num))return Modint(self.num + __x)def __sub__(self, __x):if isinstance(__x, Modint):return Modint(self.num - __x.num)return Modint(self.num - __x)def __mul__(self, __x):if isinstance(__x, Modint):return Modint(self.num * __x.num)return Modint(self.num * __x)__radd__ = __add____rmul__ = __mul__def __rsub__(self, __x):if isinstance(__x, Modint):return Modint(__x.num - self.num)return Modint(__x - self.num)def __pow__(self, __x):if isinstance(__x, Modint):return Modint(pow(self.num, __x.num, self.MOD))return Modint(pow(self.num, __x, self.MOD))def __rpow__(self, __x):if isinstance(__x, Modint):return Modint(pow(__x.num, self.num, self.MOD))return Modint(pow(__x, self.num, self.MOD))def __truediv__(self, __x):if isinstance(__x, Modint):return Modint(self.num * pow(__x.num, self.MOD - 2, self.MOD))return Modint(self.num * pow(__x, self.MOD - 2, self.MOD))def __rtruediv__(self, __x):if isinstance(__x, Modint):return Modint(__x.num * pow(self.num, self.MOD - 2, self.MOD))return Modint(__x * pow(self.num, self.MOD - 2, self.MOD))def main():a, b = map(int, input().split())n, k = map(int, input().split())current_a_coeff = Modint(1)current_b_coeff = Modint(0)ans_a_coeff = 1ans_b_coeff = 0coeff_two = Modint(1)coeff_ab = Modint(0)for k_ in range(1, (n+2)//2):current_b_coeff = current_a_coeffcurrent_a_coeff = current_a_coeff * (n-k_)/k_if k_ == (k-1):ans_a_coeff = current_a_coeffans_b_coeff = current_b_coeffelif k_ == (n+1-k):ans_a_coeff = current_b_coeffans_b_coeff = current_a_coeff# current.append([current[-1][0]*(n-k_)//k_, current[-1][0]])coeff_two += current_a_coeff ** 2coeff_two += current_b_coeff ** 2coeff_ab += 4 * current_a_coeff * current_b_coeffif n % 2 == 0:coeff_two -= current_a_coeff ** 2coeff_ab -= 2 * current_a_coeff * current_b_coeffprint(Modint(a) * ans_a_coeff +Modint(b) * ans_b_coeff)print(coeff_two * Modint(a)**2 + coeff_two * Modint(b)** 2 + coeff_ab * Modint(a) * Modint(b))if __name__ == "__main__":main()