結果

問題 No.1073 無限すごろく
ユーザー lam6er
提出日時 2025-03-26 15:44:15
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 45 ms / 2,000 ms
コード長 881 bytes
コンパイル時間 169 ms
コンパイル使用メモリ 82,912 KB
実行使用メモリ 62,644 KB
最終ジャッジ日時 2025-03-26 15:44:18
合計ジャッジ時間 2,639 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

MOD = 10**9 + 7

def multiply(a, b):
    res = [[0] * 6 for _ in range(6)]
    for i in range(6):
        for k in range(6):
            if a[i][k] == 0:
                continue
            for j in range(6):
                res[i][j] = (res[i][j] + a[i][k] * b[k][j]) % MOD
    return res

def power(mat, n):
    result = [[1 if i == j else 0 for j in range(6)] for i in range(6)]
    while n > 0:
        if n % 2 == 1:
            result = multiply(result, mat)
        mat = multiply(mat, mat)
        n = n // 2
    return result

def main():
    N = int(input().strip())
    inv6 = pow(6, MOD - 2, MOD)
    mat = [
        [inv6] * 6,
        [1, 0, 0, 0, 0, 0],
        [0, 1, 0, 0, 0, 0],
        [0, 0, 1, 0, 0, 0],
        [0, 0, 0, 1, 0, 0],
        [0, 0, 0, 0, 1, 0],
    ]
    mat_n = power(mat, N)
    print(mat_n[0][0] % MOD)

if __name__ == "__main__":
    main()
0