题目描述
定义大小为 m 的 bitset 为长度为 m 的 bool 数组。
对大小为 m 的 bitset 定义如下四种运算:
- c=a and b:在这里,如果 ai=1 且 bi=1,则 ci=1;否则 ci=0。
- c=a or b:在这里,如果 ai=1 或 bi=1,则 ci=1;否则 ci=0。
- c=a xor b:在这里,如果 ai 和 bi 中恰好有一个为 1,则 ci=1;否则 ci=0。
- c=not a:在这里,如果 ai=0,则 ci=1;否则 ci=0。
给定一个大小为 n 的 bitset 数组 s1,s2,…,sn,编写程序来回答 k 个查询,每次查询给定 l,r,你需要使用以下公式计算 t:
- t=(sl and sl+1 and ⋯ and sr) xor (not (sl or sl+1 or ⋯ or sr))
求 t 中 1 的个数。
输入格式
第一行包含两个整数 n 和 m (1≤n,m≤105; n⋅m≤106)。接下来的 n 行描述了 n 个 bitset,每行由 m 个 0 或 1 组成,表示一个 bitset。
接下来的一行包含一个整数 k,表示查询的数量 (1≤k≤2×106)。
接下来的一行包含三个整数 x,y,z (1≤x,y,z≤109)。
查询是通过以 x,y,z 为参数的伪随机算法生成的,具体来说,考虑生成长度为 k 的序列 a,b:
- a1=1。
- b1=n。
- 对于 i>1,ai=(ai−1⋅x+qi−1⋅y+z)mod。
- 对于 i > 1,b_i = (b_{i-1} \cdot y + q_{i-1} \cdot z + x) \bmod n + 1。
其中,第 i 个询问的 l 是 \min\{a_i,b_i\},r 是 \max\{a_i,b_i\},公式里的 q_{i-1} 表示第 i-1 个询问的答案。
输出格式
输出一个整数表示所有查询答案的总和。
样例输入 1
4 10 1010110101 0101111001 1101101101 1011010000 4 10 5 4
样例输出 1
9
样例输入/输出 2~3
见下发文件。
样例解释
询问编号 | l | r | 答案 |
---|---|---|---|
1 | 1 | 4 | 1 |
2 | 3 | 4 | 3 |
3 | 2 | 4 | 2 |
4 | 1 | 3 | 3 |
数据范围与约定
对于所有数据,有:
- 1 \le n,m \le 10^5
- nm \le 10^6
- 1 \le k \le 2 \times 10^6
- 1 \le x,y,z \le 10^9
子任务:
子任务编号 | 特殊性质 | 分值 |
---|---|---|
1 | n,m\le 20,k \le 50 | 40 |
2 | m=1 | 20 |
3 | k \le 1 \times 10^5 | 20 |
4 | y=z=0 | 10 |
5 | 无 | 10 |