📅  最后修改于: 2023-12-03 15:42:20.488000             🧑  作者: Mango
这是 Sudo GATE 2021 测验的第四个问题,该问题要求编写一个程序,该程序将查找并返回一个门是否存在。该程序将接收第一行输入门的数量(N),其次是 N 行输入每个门的属性(开或关)。接下来的 M 行输入要查询的门 ID,其中每个门 ID 都是介于 1 和 N 之间的整数。
第一行包含一个整数 N,表示门的数量。
接下来的 N 行是门的属性,每行有一个字符串,表示门的状态。开门为 O,关门为 C。
接下来的一行是一个整数 M,表示询问门的数量。
接下来 M 行是一个整数,表示要查询的门的 ID。
输出为 M 行,每行提供一个字符串,表示是否存在此门。 如果存在,输出 OPEN。否则输出 CLOSED。
我们可以将所有的门记录到一个数组中,然后遍历每个 ID 并查询其对应门的状态,最后输出结果即可。
下面是 Python 版本的实现:
n = int(input())
doors = []
for i in range(n):
doors.append(input())
m = int(input())
for i in range(m):
door_id = int(input())
door_state = doors[door_id - 1]
result = "OPEN" if door_state == "O" else "CLOSED"
print(result)
下面是 C++ 版本的实现:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<string> doors;
for (int i = 0; i < n; ++i) {
string status;
cin >> status;
doors.push_back(status);
}
int m;
cin >> m;
for (int i = 0; i < m; ++i) {
int door_id;
cin >> door_id;
string door_status = doors[door_id - 1];
string result = door_status == "O" ? "OPEN" : "CLOSED";
cout << result << endl;
}
return 0;
}
本算法的时间复杂度为 $O(N+M)$,其中 $N$ 是门的数量,$M$ 是查询门的数量。空间复杂度为 $O(N)$,即我们需要存储全部门的状态。