AT_k2pc001_h5.暗号化(Encipherment)

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

kagamiz 正在学习哈希。
kagamiz 在《算法竞赛进阶指南》中学习了滚动哈希,并了解到哈希是一种在字符串查找中非常有效的方法。

于是,kagamiz 思考是否可以对任意多重集合进行哈希,并设计了如下的哈希函数。

「
设 PP 为素数。要进行哈希的序列为 $ {x_1,x_2,x_3,...,x_n} $,对于每个 xix_i,令 CiC_i 表示满足 j≤ij \leq i 且 xj=xix_j = x_i 的 jj 的个数,
则(哈希值)$ = \sum x_i^{C_i} \bmod P $
」

虽然这个哈希函数很容易产生冲突,但无论如何,kagamiz 还是让你用这个函数来解决下面的问题。

问题:给定一个长度为 NN 的数列 $ {a_1,a_2,a_3,...,a_N} $,对于其中的 QQ 个子区间,分别求出上述哈希值。

NN QQ PP a1a_1 a2a_2 ...... aNa_N s1 t1s_1\ t_1 s2 t2s_2\ t_2 ... sQ tQs_Q\ t_Q

首先给出数列长度 NN,需要求哈希值的连续子区间个数 QQ,素数 PP。
接下来给出长度为 NN 的数列 $ {a_1,a_2,...,a_N} $。
最后给出 QQ 个子区间的端点 [si,ti][s_i, t_i]。对于每个子区间,按照题目中的哈希函数,输出其哈希值,每个结果占一行。

  • 1≤N≤1051 \leq N \leq 10^5 数列长度
  • 1≤Q≤1051 \leq Q \leq 10^5 子区间个数
  • 1≤P≤1091 \leq P \leq 10^9 哈希函数使用的素数
  • 1≤ai≤1061 \leq a_i \leq 10^6 数列中的每个元素
  • 1≤si≤ti≤N1 \leq s_i \leq t_i \leq N 每个子区间的端点

对于 20%20\% 的数据,保证 i≠ji \neq j 时 ai≠aja_i \neq a_j。

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

输入格式

第一行包含三个整数 NN、QQ、PP,分别表示数列长度、子区间个数和哈希函数使用的素数。
第二行包含 NN 个整数 a1,a2,...,aNa_1,a_2,...,a_N,表示数列。
接下来 QQ 行,每行包含两个整数 sis_i、tit_i,表示一个子区间的起止位置。

输出格式

对于每个子区间,输出一行哈希值。

说明/提示

无。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页