โจทย์: มีถ้วย 3 ประเภท (อาร์เรย์ p) และจานรอง 3 ประเภท (อาร์เรย์ q) มีชั้นวาง m ชั้น ตรวจสอบว่าจัดได้หรือไม่
เงื่อนไข: 1) ชั้นใดชั้นหนึ่งใส่ได้แค่ถ้วย หรือ จานรอง (ไม่ผสม) 2) ชั้นละสูงสุด 5 ถ้วย 3) ชั้นละสูงสุด 10 จานรอง
ตัวอย่าง: p=[4,3,7], q=[5,9,10], m=11 → ถ้วยรวม 14 ต้อง 3 ชั้น, จานรวม 24 ต้อง 3 ชั้น → รวม 6 ≤ 11 → True
อัลกอริทึม
- sum_p = sum(p), sum_q = sum(q)
- ชั้นสำหรับถ้วย = ceil(sum_p / 5) = (sum_p + 4) // 5
- ชั้นสำหรับจาน = ceil(sum_q / 10) = (sum_q + 9) // 10
- ถ้า total_shelves ≤ m → True
ตัวอย่างโค้ด
def is_valid(p, q, m):
sum_p = sum(p)
sum_q = sum(q)
shelves_cups = (sum_p + 5 - 1) // 5 # ceil division
shelves_saucers = (sum_q + 10 - 1) // 10
return shelves_cups + shelves_saucers <= m
p = [4, 3, 7]
q = [5, 9, 10]
m = 11
print(is_valid(p, q, m)) # True
ผลลัพธ์
True
สรุป: โจทย์คณิตศาสตร์พื้นฐาน ใช้ ceiling division คำนวณชั้นขั้นต่ำแยกประเภท รวมกันเทียบกับ m