ภาพรวมปัญหา
หาจำนวนกลุ่มขนาด 3 สูงสุด ที่สร้างได้จาก N ไอเทมประเภท A และ M ไอเทมประเภท B โดยแต่ละกลุ่มต้องมีทั้ง 2 ประเภทอย่างน้อย 1 ชิ้น
ตัวอย่าง
Input: N = 3, M = 5 Output: 2 Groups: (1A,2B), (1A,2B) ใช้ 2A และ 4B Input: N = 5, M = 9 Output: 4
แนวทางแก้ปัญหา (4 กรณี)
- M ≥ 2N: ตอบ = N
- N ≥ 2M: ตอบ = M
- (M+N) % 3 == 0: ตอบ = (M+N)/3
- อื่นๆ: ตอบ = (M+N)/3 + (เหลือพอสร้างกลุ่มเพิ่มไหม?)
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
int MaxGrp(int N, int M) {
if (N >= 2 * M) return N;
if (M >= 2 * N) return M;
if ((M + N) % 3 == 0) return (M + N) / 3;
int count = (M + N) / 3;
M %= 3; N %= 3;
if (M && N && (M + N) >= 3) count++;
return count;
}
int main() {
int N = 5, M = 9;
cout << MaxGrp(N, M);
return 0;
}
ผลลัพธ์
4