初始时灯阵全是 0。一次操作只会取反一整行或一整列,因此最终位置 (i,j) 的值只取决于:
设 ri,cj∈{0,1} 分别表示该行、该列最终是否被取反奇数次,则格子值为 ai,j=ri⊕cj。
一块广告灯阵有 n 行 m 列,初始时每个灯都是熄灭状态,用 0 表示;点亮用 1 表示。
共进行 k 次切换。每次给出两个整数 x 和 y:若 x=1,则把第 y 列的所有灯取反(0 变 1,1 变 0);若 x=2,则把第 y 行的所有灯取反。
全部切换结束后,将灯阵按行优先顺序(先第一行从左到右,再第二行,以此类推)拼成一个长度为 n×m 的二进制数,求该数的十进制值对 109+7 取模的结果。
约束:行数与列数均不超过 10^9,切换次数不超过 2\times 10^5。
第一行包含三个整数 n、m 和 k,分别表示行数、列数与切换次数。保证 1≤n,m≤109,1≤k≤2×105。 接下来 k 行,每行两个整数 x 和 y。若 x=1,表示取反第 y 列;若 x=2,表示取反第 y 行。保证 x∈{1,2},1≤y≤m 当 x=1,1≤y≤n 当 x=2。
输出一个整数,表示行优先拼接得到的二进制数对 109+7 取模后的结果。
输入
1 1 1
2 1
输出
1
说明
只有一盏灯,初始为 0。取反第 1 行后变为 1。
二进制数就是 1,答案为 1。
输入
1 3 1
1 2
输出
2
说明
一行三列,取反第 2 列后灯态为 0 1 0。
对应二进制数为 2,答案为 2。
输入
1 1 1
3 2
输出
500000004
说明
按题意模拟计算得到。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.