結果
問題 | 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)