結果
問題 | No.194 フィボナッチ数列の理解(1) |
ユーザー | Mao-beta |
提出日時 | 2024-04-03 19:40:48 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 100 ms / 5,000 ms |
コード長 | 2,190 bytes |
コンパイル時間 | 156 ms |
コンパイル使用メモリ | 82,328 KB |
実行使用メモリ | 141,748 KB |
最終ジャッジ日時 | 2024-10-01 00:02:56 |
合計ジャッジ時間 | 4,070 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 51 ms
56,900 KB |
testcase_01 | AC | 46 ms
57,060 KB |
testcase_02 | AC | 85 ms
71,968 KB |
testcase_03 | AC | 60 ms
66,020 KB |
testcase_04 | AC | 69 ms
68,888 KB |
testcase_05 | AC | 63 ms
68,024 KB |
testcase_06 | AC | 67 ms
68,528 KB |
testcase_07 | AC | 74 ms
69,744 KB |
testcase_08 | AC | 56 ms
65,152 KB |
testcase_09 | AC | 71 ms
69,972 KB |
testcase_10 | AC | 62 ms
67,392 KB |
testcase_11 | AC | 62 ms
66,828 KB |
testcase_12 | AC | 65 ms
67,672 KB |
testcase_13 | AC | 59 ms
67,228 KB |
testcase_14 | AC | 56 ms
65,856 KB |
testcase_15 | AC | 79 ms
70,280 KB |
testcase_16 | AC | 74 ms
69,584 KB |
testcase_17 | AC | 57 ms
67,360 KB |
testcase_18 | AC | 75 ms
71,004 KB |
testcase_19 | AC | 80 ms
71,248 KB |
testcase_20 | AC | 99 ms
138,748 KB |
testcase_21 | AC | 97 ms
141,748 KB |
testcase_22 | AC | 100 ms
139,708 KB |
testcase_23 | AC | 58 ms
68,480 KB |
testcase_24 | AC | 78 ms
98,452 KB |
testcase_25 | AC | 78 ms
97,576 KB |
testcase_26 | AC | 79 ms
93,992 KB |
testcase_27 | AC | 81 ms
104,520 KB |
testcase_28 | AC | 60 ms
72,936 KB |
testcase_29 | AC | 99 ms
131,000 KB |
testcase_30 | AC | 88 ms
72,700 KB |
testcase_31 | AC | 48 ms
57,264 KB |
testcase_32 | AC | 77 ms
76,288 KB |
testcase_33 | AC | 69 ms
68,424 KB |
testcase_34 | AC | 67 ms
68,884 KB |
testcase_35 | AC | 75 ms
76,548 KB |
testcase_36 | AC | 81 ms
71,636 KB |
testcase_37 | AC | 57 ms
65,680 KB |
testcase_38 | AC | 81 ms
71,568 KB |
testcase_39 | AC | 64 ms
68,352 KB |
ソースコード
import sys import math import bisect from heapq import heapify, heappop, heappush from collections import deque, defaultdict, Counter from functools import lru_cache from itertools import accumulate, combinations, permutations, product sys.setrecursionlimit(1000000) MOD = 10 ** 9 + 7 MOD99 = 998244353 input = lambda: sys.stdin.readline().strip() NI = lambda: int(input()) NMI = lambda: map(int, input().split()) NLI = lambda: list(NMI()) SI = lambda: input() SMI = lambda: input().split() SLI = lambda: list(SMI()) EI = lambda m: [NLI() for _ in range(m)] # 行列積(任意サイズ) def mul_matrix(A, B, mod=998244353): Ah = len(A) Aw = len(A[0]) Bh = len(B) Bw = len(B[0]) assert Aw == Bh C = [[0] * Bw for _ in range(Ah)] for h in range(Ah): Arow = A[h] Crow = C[h] for i in range(Aw): a = Arow[i] Brow = B[i] for w in range(Bw): Crow[w] = (Crow[w] + a * Brow[w]) % mod return C # 正方行列の累乗 mod def pow_matrix(A, n, mod=998244353): assert len(A) == len(A[0]) bitn = len(bin(n)) - 2 pows = [] size = len(A) E = [[0] * size for _ in range(size)] for i in range(size): E[i][i] = 1 pows.append(A) ans = E for i in range(bitn): if (n >> i) & 1: ans = mul_matrix(pows[-1], ans, mod) pows.append(mul_matrix(pows[-1], pows[-1], mod)) return ans def main(): N, K = NMI() A = NLI() if K <= 10**6: S = sum(A) for i in range(K-N): A.append(S % MOD) S = S - A[i] + A[i+N] print(A[-1], sum(A) % MOD) else: B = [[0]*(N+1) for _ in range(N+1)] B[0] = [1] * (N+1) B[0][-1] = 0 for i in range(N-1): B[i+1][i] = 1 B[-1] = [1] * (N+1) C = pow_matrix(B, K-N, MOD) A = A[::-1] A.append(sum(A)) f, s = 0, 0 for j in range(N+1): f += C[0][j] * A[j] % MOD f %= MOD for j in range(N+1): s += C[-1][j] * A[j] % MOD s %= MOD print(f, s) if __name__ == "__main__": main()