#57246. 异或矩阵
异或矩阵
暂无测试数据。
在一个 $N \times M$ 的矩阵 $A$ 中,第 $i$ 行,第 $j$ 列的数字为 $A[i][j]$。花椰妹询问蒜头君 $q$ 个问题,对于每个问题,花椰妹会告诉蒜头君四个整数 $x_1,y_1,x_2,y_2$,蒜头君需要回答出左上角为 $(x_1,y_1)$,右下角为 $(x_2,y_2)$ 的矩阵中所有数的异或和。
对于 $N = 4, M = 5$ 的矩阵,如果 $x_1 = 1,y_1 = 2,x_2 = 3,y_2 = 4$,那么表示的矩阵如下图中红色部分。
异或($xor$)是在两个数的二进制对应位上进行运算,运算规则如下:
- $0 \ xor \ 0 = 0$
- $0 \ xor \ 1 = 1$
- $1 \ xor \ 0 = 1$
- $1 \ xor \ 1 = 0$
在 C++
语言中,异或是由 ^
符号表示,例如:ans = 3 ^ 8;
则 ans = 11
。
异或和是指多个数进行连续异或的结果,例如:ans = a ^ b ^ c;
其中 $a,b,c$ 均为变量。
输入格式
输入第一行是以空格隔开的两个正整数 $N,M$,表示矩阵的大小。
接下来 $N$ 行,每行有 $M$ 个以空格隔开的非负整数,表示矩阵 $A$。
接下来一行一个正整数 $q$,表示花椰妹共有 $q$ 次询问。
接下来 $q$ 行,每行四个正整数 $x_1,y_1,x_2,y_2$,表示花椰妹询问的矩阵的左上角为 $(x_1,y_1)$,右下角为 $(x_2,y_2)$。
输出格式
输出共 $q$ 行,每行一个非负整数,表示花椰妹询问的矩阵内所有数字的异或和。
数据范围
- 对于 $30\%$ 的数据,$1\leq N, M \leq 100, 1\leq q \leq 100$;
- 对于 $100\%$ 的数据,$1 \leq N,M \leq 1000, 1\leq q\leq 10^5, 0\leq A[i][j] \leq 10^9,1\leq x_1 \leq x_2\leq N,1\leq y_1 \leq y_2\leq M$;
4 5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
1
1 2 3 4
12