結果

問題 No.1977 Extracting at Constant Intervals
ユーザー gew1fw
提出日時 2025-06-12 16:02:12
言語 PyPy3
(7.3.15)
結果
MLE  
実行時間 -
コード長 1,418 bytes
コンパイル時間 187 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 772,864 KB
最終ジャッジ日時 2025-06-12 16:02:21
合計ジャッジ時間 4,071 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other MLE * 1 -- * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
import math

def main():
    N, M, L = map(int, sys.stdin.readline().split())
    A = list(map(int, sys.stdin.readline().split()))
    R = L % N
    max_C = -float('inf')

    if R == 0:
        for i in range(1, L+1):
            p = (i - 1) % N
            a = A[p]
            max_j = N * M
            count = 0
            if i <= max_j:
                count = (max_j - i) // L + 1
            total = a * count
            if total > max_C:
                max_C = total
    else:
        g = math.gcd(R, N)
        D = N // g
        cycles = []
        for p0 in range(N):
            current = p0
            cycle = []
            for _ in range(D):
                cycle.append(A[current])
                current = (current + R) % N
            cycles.append(cycle)
        sum_cycle = [sum(c) for c in cycles]
        prefix = []
        for c in cycles:
            pre = [0]
            for num in c:
                pre.append(pre[-1] + num)
            prefix.append(pre)
        for i in range(1, L+1):
            p0 = (i - 1) % N
            max_j = N * M
            if i > max_j:
                continue
            T = (max_j - i) // L
            count = T + 1
            full = count // D
            rem = count % D
            s = full * sum_cycle[p0] + prefix[p0][rem]
            if s > max_C:
                max_C = s
    print(max_C)

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