結果
問題 |
No.1015 おつりは要らないです
|
ユーザー |
![]() |
提出日時 | 2025-04-16 00:12:12 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,323 bytes |
コンパイル時間 | 217 ms |
コンパイル使用メモリ | 81,788 KB |
実行使用メモリ | 104,368 KB |
最終ジャッジ日時 | 2025-04-16 00:13:37 |
合計ジャッジ時間 | 4,420 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 4 WA * 2 TLE * 1 -- * 26 |
ソースコード
import sys def main(): input = sys.stdin.read().split() idx = 0 N = int(input[idx]); idx +=1 X = int(input[idx]); idx +=1 Y = int(input[idx]); idx +=1 Z = int(input[idx]); idx +=1 A = list(map(int, input[idx:idx+N])) for a in A: m_i = (a // 1000) + 1 max_sum = X * 1 + Y * 5 + Z * 10 if max_sum < m_i: print("No") return min_B = float('inf') best_c = -1 best_a = -1 best_b = -1 max_c = min(Z, (m_i + X + 5 * Y) // 10) max_c = min(max_c, Z) max_c = min(max_c, (m_i + 100) // 10) for c in range(max_c, -1, -1): remaining = max(m_i - 10 * c, 0) sum_ab = None for delta in range(0, 5): s = remaining + delta a_part = s % 5 if a_part > X: continue b_part = (s - a_part) // 5 if b_part <= Y: sum_ab = s break if sum_ab is None: s = remaining + (5 - (remaining % 5)) if remaining % 5 != 0 else remaining a_part = s % 5 if a_part > X: a_part = min(X, s) s = a_part + 5 * ((s - a_part) // 5) b_part = (s - a_part) // 5 if b_part <= Y and s >= remaining: sum_ab = s else: a_part = min(X, s) new_s = a_part + 5 * min(Y, (s - a_part + 4) // 5) if new_s >= remaining and (new_s - a_part) // 5 <= Y: sum_ab = new_s if sum_ab is not None: B_c = 10 * c + sum_ab if B_c >= m_i and B_c < min_B: min_B = B_c best_c = c best_a = sum_ab % 5 best_b = (sum_ab - best_a) // 5 if min_B == float('inf'): print("No") return X -= best_a Y -= best_b Z -= best_c if X < 0 or Y < 0 or Z < 0: print("No") return print("Yes") if __name__ == '__main__': main()