โจทย์
เครื่องจักรทุกเครื่องเริ่มทำงานที่เวลา 0 และทำงานอย่างอิสระ เครื่องจักรที่ใช้เวลา t วินาทีจะผลิตสินค้าได้ 1 ชิ้นหลังจาก t วินาที ชิ้นถัดไปหลังจาก 2t วินาที และต่อไปเรื่อย ๆ จงหาว่าเมื่อไร (วินาทีเต็ม) ที่เครื่องจักรทั้งหมดผลิตสินค้ารวมกันครบตามเป้าหมาย
ให้เขียนฟังก์ชัน factory_machines(times, target)
อินพุต
times: จำนวนวินาทีที่แต่ละเครื่องใช้ในการผลิตสินค้า 1 ชิ้น
target: จำนวนสินค้าที่ต้องการให้ผลิตครบ
เอาต์พุต
ให้คืนจำนวนวินาทีที่น้อยที่สุดที่สินค้าถูกผลิตครบตามเป้าหมาย
เงื่อนไข
1 ≤ จำนวนเครื่อง ≤ 200,000 แต่ละค่า time และ target อยู่ระหว่าง 1 ถึง 1,000,000,000 คำตอบอยู่ในช่วงของ signed 64-bit
ตัวอย่าง
อินพุต:
times = [2, 3]
target = 5
ผลลัพธ์ที่คาดหวัง:
expected = 6
อินพุต:
std::vector<long long> times = {2, 3};
long long target = 5;
ผลลัพธ์ที่คาดหวัง:
long long expected = 6;
อินพุต:
long[] times = new long[] {2, 3};
long target = 5;
ผลลัพธ์ที่คาดหวัง:
long expected = 6;
คำอธิบาย
ที่เวลา 6 วินาที เครื่องจักรผลิตสินค้าได้รวม 3 + 2 = 5 ชิ้น ที่เวลา 5 วินาที ผลิตได้เพียง 2 + 1 = 3 ชิ้น
อินพุต:
times = [4]
target = 3
ผลลัพธ์ที่คาดหวัง:
expected = 12
อินพุต:
std::vector<long long> times = {4};
long long target = 3;
ผลลัพธ์ที่คาดหวัง:
long long expected = 12;
อินพุต:
long[] times = new long[] {4};
long target = 3;
ผลลัพธ์ที่คาดหวัง:
long expected = 12;
คำอธิบาย
เครื่องจักรหนึ่งเครื่องจะผลิตชิ้นที่สามเสร็จที่ 3 × 4 = 12 วินาที
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
สำหรับเวลาที่กำหนดค่าใดค่าหนึ่ง ให้นับว่าทุกเครื่องรวมกันผลิตได้กี่ชิ้นภายในเวลานั้น
คำใบ้ 2
คำตอบคือเวลาที่น้อยที่สุดซึ่งจำนวนที่ผลิตได้ถึงเป้าหมาย
คำใบ้ 3
เงื่อนไขที่เป็นโมโนโทนแบบนี้เหมาะกับการค้นหาเวลา แทนการจำลองการผลิตตรง ๆ
ความซับซ้อนที่คาดหวัง
เวลา O(n log T), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน