AT_k2pc001_h5.暗号化(Encipherment)
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
kagamiz 正在学习哈希。
kagamiz 在《算法竞赛进阶指南》中学习了滚动哈希,并了解到哈希是一种在字符串查找中非常有效的方法。
于是,kagamiz 思考是否可以对任意多重集合进行哈希,并设计了如下的哈希函数。
「
设 P 为素数。要进行哈希的序列为 $ {x_1,x_2,x_3,...,x_n} $,对于每个 xi,令 Ci 表示满足 j≤i 且 xj=xi 的 j 的个数,
则(哈希值)$ = \sum x_i^{C_i} \bmod P $
」
虽然这个哈希函数很容易产生冲突,但无论如何,kagamiz 还是让你用这个函数来解决下面的问题。
问题:给定一个长度为 N 的数列 $ {a_1,a_2,a_3,...,a_N} $,对于其中的 Q 个子区间,分别求出上述哈希值。
N Q P a1 a2 ... aN s1 t1 s2 t2 ... sQ tQ
首先给出数列长度 N,需要求哈希值的连续子区间个数 Q,素数 P。
接下来给出长度为 N 的数列 $ {a_1,a_2,...,a_N} $。
最后给出 Q 个子区间的端点 [si,ti]。对于每个子区间,按照题目中的哈希函数,输出其哈希值,每个结果占一行。
- 1≤N≤105 数列长度
- 1≤Q≤105 子区间个数
- 1≤P≤109 哈希函数使用的素数
- 1≤ai≤106 数列中的每个元素
- 1≤si≤ti≤N 每个子区间的端点
对于 20% 的数据,保证 i=j 时 ai=aj。
10 10 8999
2 1 1 2 1 2 1 2 1 2
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
2
3
4
8
9
17
18
34
35
67
6 6 2
1 2 3 4 5 6
1 2
2 3
3 4
4 4
5 5
6 6
1
1
1
0
1
0
输入格式
第一行包含三个整数 N、Q、P,分别表示数列长度、子区间个数和哈希函数使用的素数。
第二行包含 N 个整数 a1,a2,...,aN,表示数列。
接下来 Q 行,每行包含两个整数 si、ti,表示一个子区间的起止位置。
输出格式
对于每个子区间,输出一行哈希值。
说明/提示
无。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?