📜  门| GATE CS 2018 |简体中文第47章(1)

📅  最后修改于: 2023-12-03 14:58:20.080000             🧑  作者: Mango

门 | GATE CS 2018 | 简体中文第47章

这是GATE计算机科学考试的2018年的一道题目,对于有意向参加此项考试的程序员来说是非常有价值的。

题目描述

这道题目要求编写一个程序,来模拟一组开关的状态。

首先,在程序初始化时,所有的开关都是关闭的。程序会接收多行输入,每行输入为 'a i j' 或 'b i j'。其中,'a i j'表示将第 i 到第 j 个开关状态切换(若开关原为关闭,则切换为开启状态;若开关原为开启状态,则切换为关闭状态)。'b i j'表示查询第 i 到第 j 个开关状态中开启的开关数量。

该程序应当输出所有的 'b i j' 操作所查询的结果。

示例

输入:

a 3 6
b 2 4
a 1 4
b 4 5

输出:

1
2
解法

我们可以维护一个长度为n的数组,代表n个开关的状态,0代表关闭,1代表开启。

对于'a i j'操作,我们只需要将数组下标从i到j的状态进行取反即可。

对于'b i j'操作,我们统计数组下标从i到j的状态中,1的数量即可。

以下为Python的示例代码:

n = int(input())
switches = [0] * n

m = int(input())
for i in range(m):
    cmd, i, j = input().split()
    i, j = int(i), int(j)
    if cmd == "a":
        for k in range(i-1, j):
            switches[k] = 1 - switches[k]
    else:
        print(sum(switches[i-1:j]))

以上代码的时间复杂度为O(m+n),可以通过本题。