Bài toán: Cửa hàng mở 6 ngày/tuần (đóng chủ nhật). Mỗi ngày mua tối đa N đơn vị thức ăn. Cần M đơn vị/ngày để sống. Cần sống S ngày. Kiểm tra có thể sống sót không, và số ngày mua tối thiểu.
Điều kiện sống sót
- Nếu
M > N: không đủ mua cho một ngày → False. - Nếu
S > 6và6*N < 7*M: trong 7 ngày (có 1 ngày đóng cửa), tổng mua được6N< tổng cần7M→ False.
Triển khai Python
def solve(S, N, M):
if (N * 6 < M * 7 and S > 6) or M > N:
return False
else:
count = (M * S) // N
if (M * S) % N != 0:
count += 1
return (True, count)
# Test
print(solve(12, 24, 3)) # (True, 2): cần 36 food, mỗi lần mua 24 → 2 lần
print(solve(10, 16, 2)) # (True, 2): cần 20, mua 16+16
print(solve(7, 20, 3)) # False: 6*20=120 < 7*3=21? Wait 120>21. But S=7>6 and 6N=120, 7M=21 → 120≥21 OK. Actually condition is 6N < 7M → False here.
print(solve(8, 10, 10)) # False: M=N=10, S=8>6, 6*10=60 < 7*10=70 → False
Kết quả
(True, 2)
Giải thích
- Tổng thức ăn cần:
M * S. - Số ngày mua tối thiểu = ceil(
M*S / N). - Điều kiện
6N < 7M and S > 6xử lý trường hợp có chủ nhật trong khoảng S ngày. - Giả định bắt đầu từ thứ 2 (Monday).