📌  相关文章
📜  门| Sudo GATE 2020 Mock III(2019 年 1 月 24 日)|第 40 题(1)

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

题目简介

这是 Sudo GATE 2020 Mock III(2019 年 1 月 24 日)中的第 40 题,题目名称为 "门"。

题目描述

有一个门,每次可以选择打开或关闭。门有一个初始状态,每次打开或关闭门时,状态会发生相应的改变。现在有一个长度为 n 的二进制数组 a_i,1<=i<=n,表示每次操作打开或关闭的门的位置。其中,a_i = 1 表示第 i 个门要打开,a_i = 0 表示第 i 个门要关闭。现在,你需要求出经过 n 次操作后,所有门的状态。其中,第 i 个门的初始状态为 0。

输入格式

第一行,一个整数 n,表示二进制数组 a_i 的长度。 1<=n<=10^5 。

第二行,n 个正整数,表示二进制数组 a_i。

输出格式

输出 n 个整数,表示所有门的最终状态。

示例

示例输入 1
3
1 1 0
示例输出 1
1 1 0
示例解释 1

初始状态为 0 0 0 ,第一次打开第一个门,状态变为 1 0 0 ,第二次打开第二个门,状态变为 1 1 0 ,最后关闭第三个门,状态变为 1 1 0 。

代码实现

def door_status(n, arr):
    """
    计算门的最终状态
    :param n: int
    :param arr: List[int]
    :return: List[int]
    """
    status = [0] * n
    for i in range(n):
        if arr[i] == 1:
            for j in range(i, n):
                status[j] ^= 1
    return status

时间复杂度

算法时间复杂度为 O(n^2)。