แนวคิด
กำหนดถ้วย 3 ประเภท p[] และจานรอง 3 ประเภท q[] พร้อมชั้นวาง m ชั้น ตรวจสอบว่าจัดได้เรียบร้อยหรือไม่
กติกาการจัด
- ชั้นใดชั้นหนึ่งไม่สามารถมีทั้งถ้วยและจานรองร่วมกัน
- ถ้วยต่อชั้นสูงสุด 5 ใบ
- จานรองต่อชั้นสูงสุด 10 ใบ
ตัวอย่างที่ 1
Input: p[] = {4, 3, 7}, q[] = {5, 9, 10}, m = 11
Output: Yes
ถ้วยรวม 14 → ต้องการชั้น ⌈14/5⌉ = 3
จานรวม 24 → ต้องการชั้น ⌈24/10⌉ = 3
รวม 6 ชั้น ≤ 11 → Yes
ตัวอย่างที่ 2
Input: p[] = {5, 8, 5}, q[] = {4, 10, 11}, m = 3
Output: No
ถ้วยรวม 18 → 4 ชั้น, จานรวม 25 → 3 ชั้น, รวม 7 ชั้น > 3 → No
สูตรคำนวณ
ชั้นสำหรับถ้วย = (sum_p + 5 - 1) / 5 (Pseudo-ceiling)
ชั้นสำหรับจาน = (sum_q + 10 - 1) / 10
โค้ดตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
void canArrange1(int p[], int q[], int m) {
int sump = 0, sumq = 0;
for (int i = 0; i < 3; i++) sump += p[i];
for (int i = 0; i < 3; i++) sumq += q[i];
int mp = (sump + 5 - 1) / 5;
int mq = (sumq + 10 - 1) / 10;
if (mp + mq <= m)
cout << "Yes";
else
cout << "No";
}
int main() {
int p[] = {4, 3, 7};
int q[] = {5, 9, 10};
int m = 10;
canArrange1(p, q, m);
return 0;
}
ผลลัพธ์
Yes