結果
| 問題 |
No.1977 Extracting at Constant Intervals
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 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()
lam6er