結果

問題 No.1013 〇マス進む
ユーザー NoneNone
提出日時 2021-10-29 14:42:46
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 560 ms / 2,000 ms
コード長 1,892 bytes
コンパイル時間 525 ms
コンパイル使用メモリ 82,076 KB
実行使用メモリ 247,168 KB
最終ジャッジ日時 2024-10-07 08:33:52
合計ジャッジ時間 20,243 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 39 ms
52,824 KB
testcase_01 AC 39 ms
53,912 KB
testcase_02 AC 39 ms
53,448 KB
testcase_03 AC 57 ms
62,408 KB
testcase_04 AC 46 ms
59,684 KB
testcase_05 AC 51 ms
63,620 KB
testcase_06 AC 49 ms
62,788 KB
testcase_07 AC 53 ms
64,232 KB
testcase_08 AC 51 ms
63,232 KB
testcase_09 AC 54 ms
65,224 KB
testcase_10 AC 52 ms
64,968 KB
testcase_11 AC 50 ms
63,364 KB
testcase_12 AC 53 ms
65,220 KB
testcase_13 AC 63 ms
74,564 KB
testcase_14 AC 244 ms
145,060 KB
testcase_15 AC 435 ms
198,324 KB
testcase_16 AC 392 ms
187,120 KB
testcase_17 AC 233 ms
139,196 KB
testcase_18 AC 276 ms
154,012 KB
testcase_19 AC 182 ms
119,840 KB
testcase_20 AC 521 ms
224,888 KB
testcase_21 AC 209 ms
128,420 KB
testcase_22 AC 300 ms
156,332 KB
testcase_23 AC 128 ms
100,912 KB
testcase_24 AC 530 ms
230,380 KB
testcase_25 AC 512 ms
227,432 KB
testcase_26 AC 129 ms
101,592 KB
testcase_27 AC 200 ms
126,756 KB
testcase_28 AC 113 ms
97,692 KB
testcase_29 AC 491 ms
221,404 KB
testcase_30 AC 184 ms
123,360 KB
testcase_31 AC 319 ms
165,208 KB
testcase_32 AC 250 ms
144,048 KB
testcase_33 AC 251 ms
146,376 KB
testcase_34 AC 409 ms
195,436 KB
testcase_35 AC 390 ms
187,000 KB
testcase_36 AC 78 ms
81,812 KB
testcase_37 AC 77 ms
81,236 KB
testcase_38 AC 441 ms
206,624 KB
testcase_39 AC 158 ms
111,624 KB
testcase_40 AC 419 ms
196,664 KB
testcase_41 AC 131 ms
103,536 KB
testcase_42 AC 245 ms
145,972 KB
testcase_43 AC 160 ms
112,200 KB
testcase_44 AC 252 ms
147,264 KB
testcase_45 AC 230 ms
140,424 KB
testcase_46 AC 138 ms
106,524 KB
testcase_47 AC 240 ms
144,804 KB
testcase_48 AC 290 ms
156,124 KB
testcase_49 AC 421 ms
197,660 KB
testcase_50 AC 334 ms
170,376 KB
testcase_51 AC 312 ms
163,600 KB
testcase_52 AC 90 ms
82,532 KB
testcase_53 AC 117 ms
95,016 KB
testcase_54 AC 394 ms
191,660 KB
testcase_55 AC 145 ms
108,036 KB
testcase_56 AC 483 ms
224,556 KB
testcase_57 AC 330 ms
169,464 KB
testcase_58 AC 547 ms
242,500 KB
testcase_59 AC 560 ms
243,988 KB
testcase_60 AC 558 ms
247,168 KB
testcase_61 AC 526 ms
234,252 KB
testcase_62 AC 520 ms
230,820 KB
testcase_63 AC 39 ms
52,928 KB
testcase_64 AC 38 ms
53,296 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

class Doubling:
    def __init__(self, A, K_max=10**18 + 1):
        """
        :param A: 初期条件(写像 A:i->j を定義)
        :param K_max: K_max まで参照する可能性がある

        doubling[i][k] := dp[2^i][k]

        ダブリングを考える際、初期値は[0,1,2,....,N-1] (=dp[i][k] の添え字 k)と考えるべき
        """
        self.k_max = K_max.bit_length()
        self.n = len(A)
        self.doubling = [[-1] * self.n for _ in range(self.k_max)]
        self.doubling[0]=A

        for i in range(1, self.k_max):
            self.doubling[i] = self.merge(self.doubling[i-1],self.doubling[i-1])

    def merge(self,dp_i,dp_j):
        """
        :return dp[i+j] = merge(dp[i],dp[j])
        """
        dp_ij=[0]*self.n
        for k in range(self.n):
            if dp_j[k]!=-1:
                dp_ij[k]=dp_i[(dp_j[k]+k)%N] + dp_j[k]
        return dp_ij

    def apply_all(self, K):
        """
        :param K: K回進む
        0~N-1の全ての要素を同時にK回進める
        ダブリングを考える際、初期値は[0,1,2,....,N-1] (=dp[i][k] の添え字 k)と考えるべき
        """
        res=P
        for k in range(K.bit_length()):
            if K&(1<<k):
                res = self.merge(self.doubling[k],res)
        return res

################################################################################
def example():
    global input
    example=iter(
        """
5 2
1 2 3 4 5

        """
            .strip().split("\n"))
    input=lambda:next(example)

"""
1->3->4->1->3->4
"""

################################################################################
import sys
input = sys.stdin.readline

# example()

N, K = map(int, input().split())
P = list(map(int, input().split()))

doubling = Doubling(P, K_max = 10**18 + 1)
res=doubling.apply_all(K-1)
for i,r in enumerate(res):
    print(i+r+1)
0