Có một phòng vuông có gương 4 bức tường. Ở 3 góc (trừ góc tây nam) có 3 thụ thể (receptors) số 0, 1, 2. Tia laser từ góc tây nam chạm tường đông ở khoảng cách q từ thụ thể 0. Tìm thụ thể nào bị chạm đầu tiên. Tường có độ dài p.
Phân tích
Mô hình hóa bằng phản xạ: thay vì tia phản xạ, tưởng tượng phòng được lặp lại (như gương). Tia đi thẳng. Tìm lần đầu tiên tia chạm góc của phòng ảo.
Thuật toán
- Rút gọn p, q: chia cả 2 cho 2 cho đến khi ít nhất một số lẻ
- Nếu p chẵn → trả về 2
- Nếu q chẵn → trả về 0
- Ngược lại → trả về 1
Ví dụ
Input - p = 2, q = 1 Output - 2
Ví dụ code C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int mirrorReflection(int p, int q) {
while (p % 2 == 0 && q % 2 == 0) {
p >>= 1;
q >>= 1;
}
if (p % 2 == 0) return 2;
if (q % 2 == 0) return 0;
return 1;
}
};
int main() {
Solution ob;
cout << ob.mirrorReflection(2, 1);
return 0;
}
Kết quả
2