結果
| 問題 | No.891 隣接3項間の漸化式 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-07-18 09:37:59 |
| 言語 | Python3 (3.14.3 + numpy 2.4.4 + scipy 1.17.1) |
| 結果 |
AC
|
| 実行時間 | 95 ms / 2,000 ms |
| + 414µs | |
| コード長 | 979 bytes |
| 記録 | |
| コンパイル時間 | 832 ms |
| コンパイル使用メモリ | 21,280 KB |
| 実行使用メモリ | 15,740 KB |
| 最終ジャッジ日時 | 2026-07-18 09:38:15 |
| 合計ジャッジ時間 | 6,962 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 39 |
ソースコード
def mod_Gamma(A, Gamma, mod):
d = len(Gamma) - 1
while len(A) - 1 >= d:
n = len(A) - 1
for i in range(d):
A[n - d + i] -= A[n] * Gamma[i]
A[n - d + i] %= mod
A.pop()
return A
def convolution(A, B, mod):
d = len(A) + len(B) - 1
C = [0] * d
for i in range(len(A)):
for j in range(len(B)):
C[i + j] += A[i] * B[j]
C[i + j] %= mod
return C
def modpow(N, Gamma, mod):
R = [1]
B = [0, 1]
while N > 0:
if N % 2 == 1:
R = mod_Gamma(convolution(R, B, mod), Gamma, mod)
B = mod_Gamma(convolution(B, B, mod), Gamma, mod)
N //= 2
return R
def Fiduccia(A, Gamma, N, mod):
R = modpow(N, Gamma, mod)
ans = 0
for i in range(len(R)):
ans += A[i] * R[i]
ans %= mod
return ans
a, b, N = map(int,input().split())
A = [0, 1]
mod = 10**9 + 7
Gamma = [-b, -a, 1]
ans = Fiduccia(A, Gamma, N, mod)
print(ans)