📜  门| Sudo GATE 2021 测验 |问题 4(1)

📅  最后修改于: 2023-12-03 15:42:20.488000             🧑  作者: Mango

Sudo GATE 2021 测验:问题 4

简介

这是 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)$,即我们需要存储全部门的状态。