สมมติว่ามี n บล็อกในเส้นทาง และพนักงานกำลังวางกระเบื้องสีบนบล็อก ผู้ปฏิบัติงานกำลังวางบล็อกในลักษณะที่ว่าหากหมายเลขบล็อกในเส้นทางหารด้วย 4 หรือ/และ 2 ลงตัว แต่ไม่ใช่ 42 เขาก็จะวางแผ่นสีไว้ที่นั่น เราต้องหาจำนวนบล็อกที่เขาสามารถปิดได้หากเขาเริ่มด้วยกระเบื้องสีจำนวน k ชิ้น
ดังนั้นหากอินพุตเท่ากับ k =16 เอาต์พุตจะเป็น 32
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- MOD =10^9 + 7
- ผลหาร :=มูลค่าพื้นของ (k / 20)
- ที่เหลือ :=k mod 20
- ถ้าเศษเหลือเท่ากับ 0 แล้ว
- ผลตอบแทน ((42 * ผลหาร - 2) MOD MOD)
- มิฉะนั้น
- ผลตอบแทน ((42 * ผลหาร + 2 * ส่วนที่เหลือ) MOD MOD)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(k): MOD = 10**9 + 7 quotient = k // 20 remainder = k % 20 if remainder == 0: return ((42 * quotient - 2) % MOD) else: return ((42 * quotient + 2 * remainder) % MOD) print(solve(16))
อินพุต
16
ผลลัพธ์
32