結果
問題 | No.1097 Remainder Operation |
ユーザー | H3PO4 |
提出日時 | 2020-06-26 22:18:34 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 821 ms / 2,000 ms |
コード長 | 741 bytes |
コンパイル時間 | 102 ms |
コンパイル使用メモリ | 12,416 KB |
実行使用メモリ | 32,432 KB |
最終ジャッジ日時 | 2024-07-04 21:59:41 |
合計ジャッジ時間 | 10,928 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 21 |
ソースコード
N = int(input()) A = list(map(int, input().split())) M = [(i + a) % N for i, a in enumerate(A)] cur = 0 t = 0 visited = dict() Acc_tail = [0] while cur not in visited: visited[cur] = t Acc_tail.append(Acc_tail[-1] + A[cur]) cur = M[cur] t += 1 Acc_tail.append(Acc_tail[-1] + A[cur]) tail = visited[cur] + 1 loop_length = t - tail + 1 Acc_loop = [x - Acc_tail[tail] for x in Acc_tail[tail + 1:]] def solve(K): if K < len(Acc_tail): return Acc_tail[K] else: K -= tail ret = Acc_tail[tail] + Acc_loop[-1] * (K // loop_length) if K % loop_length: ret += Acc_loop[K % loop_length - 1] return ret Q = int(input()) for _ in range(Q): print(solve(int(input())))