📜  门| GATE-CS-2017(套装2)|问题 4(1)

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

门 | GATE-CS-2017(套装2)|问题 4

该问题是GATE-CS-2017考试的套装2中的问题4。

问题描述

考虑一个实验室,里面有n个门,每个门要么是开着的,要么是关着的。这n个门按顺序编号为1到n,其中第i个门的初始状态是给定的一个布尔值bi。你做了m次实验,每次实验都有一个整数k和一个操作类型,操作类型可能是“SWAP(i, i+k)”即交换第i个和第i+k个门的状态(如果存在),也可能是“REVERSE(i, i+k)”即翻转第i到第i+k个门的状态(包括第i和第i+k个)。

你的目标是:对于每个门,找出它的可能状态数。具体地,你需要计算所有可能的门状态矩阵的数量,并输出对10^9+7取模后的结果。

输入格式

输入文件的格式如下:

第一行是两个整数n和m,分别表示门的数量和实验的次数,以空格分隔。

第二行是n个0或1,表示每个门的初始状态,以空格分隔。

接下来m行,每行包含两个整数k和操作类型:1表示SWAP操作,2表示REVERSE操作。

输出格式

输出文件应该只有一行,即所有可能的门状态矩阵数量对10^9+7取模后的结果。

示例

输入:

5 2
1 1 0 0 1
1 1
2 2

输出:

10
解释

原始状态下,门状态矩阵的数量为2^5=32。

第一次实验操作是SWAP(1,2),即交换第1个门和第2个门。此时两个门都是开着的,门状态矩阵的数量为1。

第二次实验操作是REVERSE(2,3),即翻转第2个门和第3个门。此时三个门都是关着的,门状态矩阵的数量为1。

因此,总门状态矩阵数量为211=2,对10^9+7 取模后为10。