📜  门| GATE-CS-2005 |问题 23(1)

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

门 | GATE-CS-2005 | 问题 23

题目描述

有一个由若干个门组成的通道,每个门都有两个状态:打开和关闭。初始时所有的门都是关闭状态。进行n次操作,每次操作中选择一些门,然后将这些门的状态取反。求最终所有门状态的情况。

输入格式

第一行一个整数t表示数据组数。

对于每组数据,第一行一个整数n表示进行操作的次数。

接下来的n行,每行开头两个整数p和q,表示对门的编号为[p, q]的门进行状态取反。

输出格式

对于每组数据,输出一行表示最终门的状态,用空格分隔每个门的状态,0表示关闭状态,1表示打开状态。

示例

输入:

2
3
1 2
2 3
1 3
4
1 3
2 4
1 4
3 3

输出:

1 0 1
0 0 1 1
思路

我们可以使用一个数组来保存门的状态,其中0表示关闭,1表示打开。每次操作时,根据给定范围更新状态即可。

代码实现
```python
def gate_doors(n, operations):
    doors = [0] * 1000000  # 数组长度至少为题目要求的100000
    for p, q in operations:
        for i in range(p-1, q):
            doors[i] = 1 - doors[i]  # 取反
    return ' '.join(map(str, doors[:n]))
    
t = int(input())
for _ in range(t):
    n = int(input())
    operations = [list(map(int, input().split())) for _ in range(n)]
    print(gate_doors(n, operations))