📅  最后修改于: 2023-12-03 14:58:20.080000             🧑  作者: Mango
这是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),可以通过本题。