結果
| 問題 |
No.1013 〇マス進む
|
| コンテスト | |
| ユーザー |
tamato
|
| 提出日時 | 2020-03-20 23:16:27 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,978 bytes |
| コンパイル時間 | 264 ms |
| コンパイル使用メモリ | 82,332 KB |
| 実行使用メモリ | 97,764 KB |
| 最終ジャッジ日時 | 2024-12-15 14:34:12 |
| 合計ジャッジ時間 | 9,672 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | AC * 2 WA * 60 |
ソースコード
def main():
import sys
from collections import deque
input = sys.stdin.readline
N, K = map(int, input().split())
P = list(map(int, input().split()))
ans = [-1] * (N+1)
dest = [0] * (N+1)
to = [0] * (N+1)
rev = [[] for _ in range(N+1)]
for i in range(1, N+1):
to[i] = i + P[i-1]
if to[i] > N:
to[i] -= N
rev[to[i]].append(i)
seen = [0] * (N+1)
for i in range(1, N+1):
if seen[i] == 0:
x = i
cycle = []
while True:
if seen[x] == 2:
break
if seen[x]:
cycle.append(x)
seen[x] += 1
x = to[x]
#print(i, seen, cycle, ans)
L = len(cycle)
cs = [0] * (L+1)
cs[0] = cycle[0]
for j in range(L):
cs[j+1] = cs[j] + P[cycle[j]-1]
d, m = divmod(K, L)
ans[cycle[0]] = d * (cs[-1] - cs[0]) + cs[m]
last = cycle[m%L]
dest[cycle[0]] = last
for j in range(1, L):
v = cycle[j]
u = cycle[j-1]
ans[v] = ans[u] + P[last-1]
last = to[last]
dest[v] = last
if cycle[j] <= cycle[j-1]:
ans[v] -= N
c2i = {cycle[j]: j for j in range(L)}
que = deque()
for v in cycle:
for u in rev[v]:
if u not in c2i:
que.append(u)
while que:
v = que.popleft()
seen[v] = 3
u = to[v]
w = cycle[c2i[dest[u]] - 1]
dest[v] = w
ans[v] = ans[u] - P[w-1]
if v >= u:
ans[v] += N
for uu in rev[v]:
que.append(uu)
print(*ans[1:])
if __name__ == '__main__':
main()
tamato