#P12888. 【NOIP Round #8】位集

【NOIP Round #8】位集

题目描述

定义大小为 mm 的 bitset 为长度为 mm 的 bool 数组。

对大小为 mm 的 bitset 定义如下四种运算:

  • c=a and bc = a \text{ and } b:在这里,如果 ai=1a_i = 1bi=1b_i = 1,则 ci=1c_i = 1;否则 ci=0c_i = 0
  • c=a or bc = a \text{ or } b:在这里,如果 ai=1a_i = 1bi=1b_i = 1,则 ci=1c_i = 1;否则 ci=0c_i = 0
  • c=a xor bc = a \text{ xor } b:在这里,如果 aia_ibib_i 中恰好有一个为 11,则 ci=1c_i = 1;否则 ci=0c_i = 0
  • c=not ac = \text{not } a:在这里,如果 ai=0a_i = 0,则 ci=1c_i = 1;否则 ci=0c_i = 0

给定一个大小为 nn 的 bitset 数组 s1,s2,,sns_1, s_2, \dots, s_n,编写程序来回答 kk 个查询,每次查询给定 l,rl,r,你需要使用以下公式计算 tt

  • $t=(s_l \space \text{and}\space s_{l+1} \space \text{and } \cdots \text{ and } s_r) \text{ xor } (\text{not }(s_l \text{ or } s_{l+1} \text{ or } \cdots \text{ or } s_r))$

tt 中 1 的个数。

输入格式

第一行包含两个整数 nnmm (1n,m1051 \leq n, m \leq 10^5; nm106n \cdot m \leq 10^6)。接下来的 nn 行描述了 nn 个 bitset,每行由 mm 个 0 或 1 组成,表示一个 bitset。

接下来的一行包含一个整数 kk,表示查询的数量 (1k2×1061 \leq k \leq 2 \times 10^6)。

接下来的一行包含三个整数 x,y,zx, y, z (1x,y,z1091 \leq x, y, z \leq 10^9)。

查询是通过以 x,y,zx,y,z 为参数的伪随机算法生成的,具体来说,考虑生成长度为 kk 的序列 a,ba,b

  • a1=1a_1 = 1
  • b1=nb_1 = n
  • 对于 i>1i > 1,$a_i = (a_{i-1} \cdot x + q_{i-1} \cdot y + z) \bmod n + 1$。
  • 对于 i>1i > 1,$b_i = (b_{i-1} \cdot y + q_{i-1} \cdot z + x) \bmod n + 1$。

其中,第 ii 个询问的 llmin{ai,bi}\min\{a_i,b_i\}rrmax{ai,bi}\max\{a_i,b_i\},公式里的 qi1q_{i-1} 表示第 i1i-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$

数据范围与约定

对于所有数据,有:

  • 1n,m1051 \le n,m \le 10^5
  • nm106nm \le 10^6
  • 1k2×1061 \le k \le 2 \times 10^6
  • 1x,y,z1091 \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$