สมมติว่าเรามีตัวเลขสองตัว l และ r มีร้านค้าแห่งหนึ่งและเราต้องการขายภาชนะใส่อาหารที่มีอาหารจำนวน 'a' พร้อมส่วนลด และลูกค้าบางรายต้องการซื้ออาหาร x ลูกค้าทำตามกลยุทธ์ที่โลภ −
-
เขาซื้อชั้นของแพ็ค (x/a) พร้อมส่วนลด
-
แล้วต้องการซื้ออาหารที่เหลือ (x mod a) ทีละรายการ
แต่ลูกค้าเป็นคนโลภ ดังนั้น ถ้าเขาต้องการซื้ออาหาร (x mod a) ทีละอย่าง และมันเกิดขึ้นที่ (x mod a) ≥ a/2 เขาจึงตัดสินใจซื้ออาหารทั้งห่อ ลูกค้าสามารถซื้ออาหารจำนวนเท่าใดก็ได้ในช่วง l ถึง r (รวมทั้งสองอย่าง) เราต้องตรวจสอบว่าเราสามารถเลือกขนาดแพ็ค a ที่ลูกค้าแต่ละรายซื้อกระป๋องมากกว่าที่พวกเขาต้องการในตอนแรกได้หรือไม่
ดังนั้นหากอินพุตเป็นเหมือน l =3; r =4 ผลที่ได้จะเป็น True เพราะถ้า a =5 ดังนั้นหากต้องการซื้อ 3 หรือ 4 กระป๋องก็สามารถซื้อเป็นแพ็คได้
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
if r / 2 >= l, then: 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