คำอธิบายปัญหา
สมมติว่าเรามีตัวเลข 4 ตัวคือ p, a, b และ c มีสระว่ายน้ำและนักว่ายน้ำ 3 คน ใช้เวลา a, b, c นาทีในการข้ามสระและกลับมา ตัวแรกอยู่ข้างซ้ายที่เวลา 0, a, 2a, 3a... ตัวที่สอง 0, b, 2b, 3b... ตัวที่สาม 0, c, 2c, 3c... ถ้าเราไปที่สระหลัง p นาที ต้องการหาเวลาที่ต้องรอขั้นต่ำเพื่อเจอนักว่ายน้ำอย่างน้อย 1 คนที่ข้างซ้าย
ตัวอย่าง: p = 2; a = 6; b = 10; c = 9 ผลลัพธ์คือ 4 เพราะที่นาที 2 เราอยู่ที่สระ ตัวแรกกลับมาที่นาที 6 ต้องรอ 4 หน่วยเวลา
ขั้นตอนการแก้ปัญหา
ลด p ลง 1 คืนค่า min(a - (p mod a + 1), b - (p mod b + 1), c - (p mod c + 1))
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
int solve(int p, int a, int b, int c) {
p--;
return min(a - (p % a + 1), min(b - (p % b + 1), c - (p % c + 1)));
}
int main() {
int p = 2;
int a = 6;
int b = 10;
int c = 9;
cout << solve(p, a, b, c) << endl;
}
อินพุต
2, 6, 10, 9
เอาต์พุต
4