Có n đèn initially bật và 4 nút bấm. Sau đúng m thao tác ngẫu nhiên, hãy đếm số trạng thái khác nhau có thể có của n đèn. 4 nút thực hiện:
- Đảo tất cả đèn.
- Đảo đèn số chẵn.
- Đảo đèn số lẻ.
- Đảo đèn ở vị trí
3k+1(k = 0,1,2...).
Ví dụ: n=3, m=1 → 4 trạng thái.
Quan sát & Giải pháp
Do tính chất tuần hoàn của các phép đảo, số trạng thái chỉ phụ thuộc vào n và m với các trường hợp:
n==0 || m==0→ 1n==1→ 2n==2→m==1 ? 3 : 4m==1→ 4m==2→ 7- Còn lại → 8
Mã nguồn C++
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int flipLights(int n, int m) {
if (m == 0 || n == 0) return 1;
if (n == 1) return 2;
if (n == 2) return m == 1 ? 3 : 4;
if (m == 1) return 4;
return m == 2 ? 7 : 8;
}
};
int main() {
Solution ob;
cout << ob.flipLights(3, 1);
return 0;
}
Đầu vào / Đầu ra
Input: 3 1
Output: 4