T156618 「MCOI-(-1)」游戏编码
题目背景
我们都知道 MC 是用编码形成的游戏,编码可以看做一些字符串用一些空格和换行组成的。
今天,Steve 和 Alex 在 MC 世界里待的无聊了,所以打算把 MC 源代码作为字符串来玩玩。
Steve 和 Alex 无意间听到了哈希值的定义,所以 Steve 就像让 Alex 计算一些哈希值。
题目描述
已知一个字符串为 $S$,$\rm Len$ 表示它的长度,它的第 $i$ 位的 ASCII 码为 $S_i$。
字符串 $S$ 的哈希值 $H(S)$ 定义为:
$$H(S)=\sum\limits_{i=1}^{\rm Len}S_i\times R^{{\rm Len}-i}$$
当然哈希值还需要对 $P$ 取模。其中 $R$ 是一个选定的底数,是一个定值。
举个例子,已知字符串 $S=\tt abc$,$R=131$,$P=10^4+7$,则它的哈希值 $H(S)$ 为:
$$H(S)=97\times 131^2+99\times131+98=1677682$$
$\bmod\ P$ 后值为 $6515$。
但 Alex 不满足于字符串哈希,他还会数列哈希。与字符串哈希相似,对于数列 $S$,$\rm Len$ 表示它的长度,$S_i$ 表示第 $i$ 个元素的值,$H(S)$ 定义为:
$$H(S)=\sum\limits_{i=1}^{\rm Len}S_i\times R^{{\rm Len}-i}$$
结果对 $P$ 取模。
举个例子,已知数列 $S=\{97,99,98\}$,$R=131$,$P=10^4+7$,则它的哈希值 $H(S)$ 为
$$H(S)=97\times 131^2+99\times131+98=1677682$$
$\bmod\ P$ 后值为 $6515$。
Alex 很高兴,它试图将它见到的所有字符串进行哈希。
一旁的 Steve 看不下去了,它扔给 Alex 一个特别的数列。
这个数列由 $N$ 段构成,第 $i$ 段由相同的 $C_i$ 个数 $A_i$ 构成。比如 $N=2,C_1=3,A_1=2,C_2=5,A_2=3$,那么数列为 $\{2,2,2,3,3,3,3,3\}$。
Alex 花了很长时间仍然没有算出它的哈希值,他现在向你求助,他需要你帮他计算这个数列的哈希值。由于 Alex 并不会判断一个数是否为质数,所以不保证 $P$ 为质数。
输入格式
第一行三个正整数 $N,P,R$,分别表示数列的段数,哈希的模数和底数 $R$。
接下来 $N$ 行,每行两个正整数,分别对应 $C_i,A_i$。
输出格式
输出仅一行,即取模后的哈希值 $H(S)$。
说明/提示
#### 数据规模与约定
**本题采用捆绑测试。**
- Subtask 1(10 pts):$N,C_i \le 1000$,满足性质 A。
- Subtask 2(25 pts):满足性质 A。
- Subtask 3(30 pts):$N \le 10^5$。
- Subtask 4(35 pts):无特殊限制。
对于 $100\%$ 的数据,$1 \le N\le 10^6$,$1\le C_i\lt2^{63}$,$1 \le P,A_i\le2^{31}$。
性质 A:Alex 运气好,$P$ 为质数。
Subtask 1 ~ 3 时限 1s,Subtask 4 时限 3s。