สมมติว่าเรามีตัวเลขสองจำนวน l และ r มีร้านขายภาชนะอาหาร 'a' ชิ้นลดราคา ลูกค้าอยากซื้อ x ชิ้น ลูกค้ากลยุทธ์โลภ:
- ซื้อ floor(x/a) แพ็กลดราคา
- ซื้อเหลือ (x mod a) ชิ้นทีละชิ้น
แต่ลูกค้าโลภ ถ้า (x mod a) >= a/2 จะซื้อแพ็คเต็ม a ชิ้นแทน ลูกค้าซื้อได้ทุกจำนวนในช่วง l ถึง r ต้องตรวจสอบว่าเลือกขนาดแพ็ค a ได้ไหม ที่ทำให้ลูกค้าซื้อมากกว่าที่อยากซื้อเริ่มต้น
เช่น ถ้าอินพุตคือ l = 3; r = 4 เอาต์พุตจะเป็น True เพราะถ้า a = 5 อยากซื้อ 3 หรือ 4 ก็ซื้อแพ็คเต็ม
ขั้นตอนการแก้ปัญหา
if r / 2 >= l:
return false
otherwise:
return true
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
bool solve(int l, int r) {
if (r / 2 >= l)
return false;
else
return true;
}
int main() {
int l = 3;
int r = 4;
cout << solve(l, r) << endl;
}
อินพุต
3,4
เอาต์พุต
1