結果
問題 | No.147 試験監督(2) |
ユーザー | wotsushi |
提出日時 | 2017-02-05 16:53:02 |
言語 | Ruby (3.3.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 991 bytes |
コンパイル時間 | 199 ms |
コンパイル使用メモリ | 7,424 KB |
実行使用メモリ | 37,696 KB |
最終ジャッジ日時 | 2024-06-06 14:30:01 |
合計ジャッジ時間 | 7,135 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | TLE | - |
testcase_01 | -- | - |
testcase_02 | -- | - |
testcase_03 | -- | - |
コンパイルメッセージ
Syntax OK
ソースコード
N = gets.to_i C, D = (1..N).map {gets.split.map(&:to_i)}.transpose M = 10**9 + 7 def f(a, n) if n == 0 [[1, 0], [0, 1]] else b = f(a, n / 2) c = [[(b[0][0] * b[0][0] + b[0][1] * b[1][0]) % M, (b[0][0] * b[0][1] + b[0][1] * b[1][1]) % M], [(b[1][0] * b[0][0] + b[1][1] * b[1][0]) % M, (b[1][0] * b[0][1] + b[1][1] * b[1][1]) % M]] if n % 2 == 0 c else [[(c[0][0] * a[0][0] + c[0][1] * a[1][0]) % M, (c[0][0] * a[0][1] + c[0][1] * a[1][1]) % M], [(c[1][0] * a[0][0] + c[1][1] * a[1][0]) % M, (c[1][0] * a[0][1] + c[1][1] * a[1][1]) % M]] end end end def g(a, n) if n == 0 1 else b = g(a, n / 2) c = b**2 % M if n % 2 == 0 c else (c * a) % M end end end ans = C.zip(D).map {|c, d| x = if c == 1 2 elsif c == 2 3 else a = f([[1, 1], [1, 0]], c - 2) 3 * a[0][0] + 2 * a[0][1] end g(x, d) }.inject(1) {|memo, item| (memo * item) % M} puts ans