結果
問題 | No.1810 RGB Biscuits |
ユーザー |
![]() |
提出日時 | 2024-11-30 19:02:24 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 359 ms / 2,000 ms |
コード長 | 2,080 bytes |
コンパイル時間 | 216 ms |
コンパイル使用メモリ | 82,192 KB |
実行使用メモリ | 79,084 KB |
最終ジャッジ日時 | 2024-11-30 19:02:32 |
合計ジャッジ時間 | 4,779 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 20 |
ソースコード
import sysinput = sys.stdin.readlineMOD = 10 ** 9 + 7class Matrix:def __init__(self, A: list):if not(A and isinstance(A[0], list)):A = [A]self.A = Aself.row = len(A)self.col = len(A[0])self.I = Noneif(self.row == self.col):self.I = [[0] * self.col for _ in [0] * self.row]for i in range(self.row):self.I[i][i] = 1def set_A(self, A: list) -> None:self.A = Adef set_I(self, I) -> None:self.I = Idef __str__(self):return str(self.A)__repr__ = __str__def __add__(self, other):ret = Matrix(self)for i in range(self.row):for j in range(self.col):ret.A[i][j] = self.A[i][j] + other.A[i][j]ret.A[i][j] %= MODreturn retdef __sub__(self, other):ret = Matrix(self)for i in range(self.row):for j in range(self.col):ret.A[i][j] = self.A[i][j] - other.A[i][j]ret.A[i][j] %= MODreturn retdef __mul__(self, other):assert(self.col == other.row)ret = Matrix([[0]*other.col for _ in [0]*self.row])for i in range(self.row):for j in range(other.col):ret.A[i][j] = sum(self.A[i][k] * other.A[k][j] % MOD for k in range(self.col))ret.A[i][j] %= MODreturn retdef __pow__(self, other: int):mat = selfret = Matrix(self.I)n = otherwhile(n):if(n & 1):ret = mat * retmat = mat * matn >>= 1return ret'''Main Code'''a, b = map(int, input().split())A = Matrix([[a, b], [1, 0]])v = Matrix([[1], [1]])n = int(input())for _ in [0] * n:t = int(input())d = t // 2; r = t % 2v1 = (A ** d) * vv2 = A * v1ans = 0if(r == 1):ans = (v1.A[0][0] + v1.A[1][0] + v2.A[0][0]) % MODelse:ans = (v1.A[0][0] + v1.A[1][0]) % MODprint(ans)