結果
| 問題 |
No.1515 Making Many Multiples
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 16:41:10 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,653 bytes |
| コンパイル時間 | 197 ms |
| コンパイル使用メモリ | 81,596 KB |
| 実行使用メモリ | 305,472 KB |
| 最終ジャッジ日時 | 2025-04-16 16:42:05 |
| 合計ジャッジ時間 | 3,811 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | AC * 2 TLE * 1 -- * 25 |
ソースコード
def main():
import sys
input = sys.stdin.read().split()
idx = 0
N = int(input[idx]); idx +=1
K = int(input[idx]); idx +=1
X = int(input[idx]); idx +=1
Y = int(input[idx]); idx +=1
A = list(map(int, input[idx:idx+N]))
X_mod = X % K
Y_mod = Y % K
if X_mod > Y_mod:
X_mod, Y_mod = Y_mod, X_mod
active = {(X_mod, Y_mod): 0}
for a in A:
c = a % K
new_active = {}
for (u, v), points in active.items():
sum_three = (u + v + c) % K
new_points = points + (1 if sum_three == 0 else 0)
# Discard u
new_u = min(v, c)
new_v = max(v, c)
key = (new_u, new_v)
if key in new_active:
if new_points > new_active[key]:
new_active[key] = new_points
else:
new_active[key] = new_points
# Discard v
new_u = min(u, c)
new_v = max(u, c)
key = (new_u, new_v)
if key in new_active:
if new_points > new_active[key]:
new_active[key] = new_points
else:
new_active[key] = new_points
# Discard c
key = (u, v)
if key in new_active:
if new_points > new_active[key]:
new_active[key] = new_points
else:
new_active[key] = new_points
active = new_active
if not active:
print(0)
else:
print(max(active.values()))
if __name__ == "__main__":
main()
lam6er