結果
| 問題 |
No.3130 Twin's Add Max Min Game
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-04-25 10:58:31 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 173 ms / 2,000 ms |
| コード長 | 907 bytes |
| コンパイル時間 | 348 ms |
| コンパイル使用メモリ | 82,320 KB |
| 実行使用メモリ | 99,328 KB |
| 最終ジャッジ日時 | 2025-04-25 10:58:44 |
| 合計ジャッジ時間 | 12,704 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 56 |
ソースコード
n = int(input())
a = [int(x) for x in input().split()]
s = input().split()
assert 1 <= n <= 2 * 10 ** 5
for x in a:
assert 1 <= x <= 10 ** 9
c_add = s.count("add")
c_max = s.count("max")
c_min = s.count("min")
"""
x < 0 とはならないので
min(x, y) <= max(x, y) <= add(x, y) となる
"""
if c_min == n:
exit(print(0))
"""
最後のc_min枚はminが最適である
(swapすれば明らかに解が大きくならない)
最初の1枚は明らかにaddがよい
(基本は max <= add 等号成立は1枚目のみ)
葵ちゃんは最小化をしたいので「なるべくadd - maxの総和が小さくなる」事を目指す
add - max = min(x, y) である
よって min(x,y) の最小化と同じことである
"""
a.sort()
if c_add == 0:
print(a[c_max-1])
exit()
ans = sum(a[:c_add-1]) + a[c_add + c_max - 1]
if c_min != 0:
ans = min(ans, a[c_add + c_max])
print(ans)