#CSP202006B. 稀疏向量

稀疏向量

时间限制: 2.0 秒

空间限制: 512 MB

题目描述

对于一个 nn 维整数向量 vZn\boldsymbol{v} \in \mathbb{Z}^n,其在第 indexindex 个维度上的取值记作 vindex\boldsymbol{v}_{index}。这里我们约定 indexindex 的取值从 11 开始,即 $\boldsymbol{v} = ( \boldsymbol{v}_1, \boldsymbol{v}_2, \cdots, \boldsymbol{v}_n )$。 下面介绍一种向量的稀疏表示方法。

如果 v\boldsymbol{v} 仅在少量维度上的取值00,则称其为稀疏向量

例如当 n=10n = 10 时,v=(0,0,0,5,0,0,3,0,0,1)\boldsymbol{v} = ( 0, 0, 0, 5, 0, 0, -3, 0, 0, 1 ) 就是一个稀疏向量。

由于稀疏向量的非零值较少,我们可以通过仅存储非零值的方式来节省空间。具体来说,每个非零值都可以用一个 (index,value)(index, value) 对来表示,即该向量在第 indexindex 个维度上的取值 vindex=value0\boldsymbol{v}_{index} = value \neq 0。在上面的例子中,v\boldsymbol{v} 就可以表示为 [(4,5),(7,3),(10,1)][ (4, 5), (7, -3), (10, 1) ]

接下来给出这种稀疏表示一般化的定义。

  • 对于任意一个 nn 维整数向量 vZn\boldsymbol{v} \in \mathbb{Z}^n,如果其在且仅在 aa 个维度上取值不为 00,则可以唯一表示为:$$ [ (index_1, value_1), (index_2, value_2), \cdots, (index_a, value_a) ] $$
  • 其中所有的 indexindex 均为整数且满足:$$ 1 \leq index_1 < index_2 < \cdots < index_a \leq n $$
  • valueivalue_i 表示向量 v\boldsymbol{v} 在对应维度 indexiindex_i 上的非零值。

给出两个 nn 维整数向量 u,vZn\boldsymbol{u}, \boldsymbol{v} \in \mathbb{Z}^n 的稀疏表示,试计算它们的内积。

$$ \boldsymbol{u} \cdot \boldsymbol{v} = \sum_{i=1}^{n}{\boldsymbol{u}_i \cdot \boldsymbol{v}_i} $$

输入格式

从标准输入读入数据。

输入的第一行包含用空格分隔的三个正整数 nnaabb,其中 nn 表示向量 u\boldsymbol{u}v\boldsymbol{v} 的维数,aabb 分别表示两个向量所含非零值的个数。

第二行到第 a+1a+1 行输入向量 u\boldsymbol{u} 的稀疏表示。第 i+1i+1 行(1ia1 \leq i \leq a)包含用空格分隔的两个整数 indexiindex_ivalueivalue_i,表示 uindexi=valuei0\boldsymbol{u}_{index_i} = value_i \neq 0

a+2a+2 行到第 a+b+1a+b+1 行输入向量 v\boldsymbol{v} 的稀疏表示。第 j+a+1j+a+1 行(1jb1 \leq j \leq b)包含用空格分隔的两个整数 indexjindex_jvaluejvalue_j,表示 vindexj=valuej0\boldsymbol{v}_{index_j} = value_j \neq 0

输出格式

输出到标准输出。

输出一个整数,表示向量 u\boldsymbol{u}v\boldsymbol{v} 的内积 uv\boldsymbol{u} \cdot \boldsymbol{v}

10 3 4
4 5
7 -3
10 1
1 10
4 20
5 30
7 40
-20

样例 1 解释

u=(0,0,0,5,0,0,3,0,0,1)\boldsymbol{u} = ( 0, 0, 0, 5, 0, 0, -3, 0, 0, 1 )

$\boldsymbol{v} = ( 10, 0, 0, 20, 30, 0, 40, 0, 0, 0 )$

$\boldsymbol{u} \cdot \boldsymbol{v} = 5 \times 20 + (-3) \times 40 = -20$

子任务

  • 输入数据保证 0<a,b<n0 < a, b < n
  • 向量 u\boldsymbol{u}v\boldsymbol{v} 在每一维度上取值的绝对值 $| \boldsymbol{u}_i |, | \boldsymbol{v}_i | \leq 10^{2}$(1in1 \leq i \leq n)。
测试点编号 nn\le a,ba,b\le
131\sim 3 10510^5 10310^3
464\sim 6 5×1055\times 10^5 10510^5
7107\sim 10 10910^9 5×1055\times 10^5

提示

本题输入量较大,请采用效率较高的读入方式。