Đề thi Học sinh giỏi Tin học/3/Lời giải

Lời giải bằng C++

#include <iostream>
using namespace std;

int main() {
    int n; cin >> n;
    while(n--) {
        int key, door[4];
        cin >> key >> door[1] >> door[2] >> door[3];
        if (door[key] != 0 && door[door[key]] != 0) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    return 0;
}

Giải thích

sửa
  • Biến n: biến lặp sử dụng trong vòng lặp while để chạy nhiều trường hợp
  • Biến key: con số ghi trên chìa khóa trong tay bạn ban đầu
  • Mảng door: được khai báo tới 4 phần tử (mặc dù chỉ cần 3) để lợi dụng chỉ số mảng viết số thứ tự cửa.

Ý tưởng: muốn mở được cả 3 cánh cửa phải có chìa khóa đằng sau cánh cửa đầu tiên mở được và cánh cửa thứ hai mở được.

Cài đặt: chìa khóa đằng sau cánh cửa đầu tiên mở được là door[key] và sau cánh cửa thứ hai mở được là door[door[key]]. Cả hai giá trị này phải cùng khác 0 thì mới mở được hết cánh cửa, không thì không mở được.