📅  最后修改于: 2023-12-03 14:58:32.466000             🧑  作者: Mango
该问题是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。