题目描述
定义大小为 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:如果 a 和 b 中恰好有一个为 1,则 ci=1;否则 ci=0。
- c=not a:如果 ai=0,则 ci=1;否则 ci=0。
给定大小为 n 的 bitset
数组 s1,s2,…,sn,编写程序回答 k 个查询。每次查询给定 l,r,需计算:
$t = (s_l \text{ and } s_{l+1} \text{ and } \ldots \text{ and } s_r) \text{ xor } (\text{not } (s_l \text{ or } s_{l+1} \text{ or } \ldots \text{ or } s_r))$
求 t 中 1 的个数。
输入格式
第一行包含整数 n 和 m(1<n,m≤105,n⋅m≤106)。
接下来 n 行,每行 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,$a_i = (a_{i-1} \cdot x + q_{i-1} \cdot y + z) \ (\text{mod} \ n) + 1$。
- 对于i>1,$b_i = (b_{i-1} \cdot y + q_{i-1} \cdot z + x) \ (\text{mod} \ n) + 1$。
其中,第i个询问的l是 min(ai,bi),r是 max(ai,bi),公式里的qi−1表示第i−1个询问的答案。
输出格式
输出所有查询答案的总和。
样例1
输入
4 10
1010110101
0101111001
1101101101
1011010000
4
10 5 4
输出
9
样例解释
对于询问 1: l=1,r=4, 答案为 1;
对于询问 2: l=3,r=4, 答案为 3;
对于询问 3: l=2,r=4, 答案为 2;
对于询问 4: l=1,r=3, 答案为 3;
数据范围与约定
- 1<n,m≤105,n⋅m≤106
- 1≤k≤2×106
- 1≤x,y,z≤109
子任务
子任务 |
特殊性质 |
分值 |
1 |
n,m≤20,k≤50 |
20 |
2 |
m=1 |
3 |
k≤105 |
4 |
y=z=0 |
10 |
5 |
无 |
30 |