結果
問題 |
No.1977 Extracting at Constant Intervals
|
ユーザー |
![]() |
提出日時 | 2025-03-31 17:58:58 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,547 bytes |
コンパイル時間 | 163 ms |
コンパイル使用メモリ | 82,184 KB |
実行使用メモリ | 91,880 KB |
最終ジャッジ日時 | 2025-03-31 17:59:44 |
合計ジャッジ時間 | 7,803 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 1 TLE * 3 -- * 27 |
ソースコード
import sys import math from collections import defaultdict def input(): return sys.stdin.read() def modinv(a, m): g, x, y = extended_gcd(a, m) if g != 1: return None # inverse doesn't exist else: return x % m def extended_gcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = extended_gcd(b % a, a) return (g, x - (b // a) * y, y) def main(): data = input().split() idx = 0 N = int(data[idx]) idx +=1 M = int(data[idx]) idx +=1 L = int(data[idx]) idx +=1 A = list(map(int, data[idx:idx+N])) idx += N d = math.gcd(N, L) L_prime = L // d N_prime = N // d try: inv_N_prime = modinv(N_prime, L_prime) except: print(0) return groups = defaultdict(list) for p in range(1, N+1): s = p % d m_p = (p - s) // d groups[s].append( (m_p, A[p-1]) ) max_sum = -float('inf') for s in groups: current_list = groups[s] # Iterate over all possible t in 0 to L_prime -1 for t in range(L_prime): total = 0 for (m_p, a_p) in current_list: c = t - m_p k0 = (c * inv_N_prime) % L_prime if k0 > M-1: cnt = 0 else: cnt = ( (M-1 - k0) // L_prime ) + 1 total += a_p * cnt if total > max_sum: max_sum = total print(max_sum) if __name__ == '__main__': main()