結果
| 問題 |
No.1015 おつりは要らないです
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 16:38:14 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,323 bytes |
| コンパイル時間 | 302 ms |
| コンパイル使用メモリ | 81,700 KB |
| 実行使用メモリ | 104,072 KB |
| 最終ジャッジ日時 | 2025-04-16 16:40:16 |
| 合計ジャッジ時間 | 5,308 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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()
lam6er