设无限循环序列满足:
bi=a((i−1)modn)+1定义前缀余数:
在一个环形监测阵列中,有 n 个站点,编号为 1 到 n。第 i 个站点记录一个整数偏移量 ai。站点按环形排列,编号 n 的后继是编号 1。
给定一个正整数 K。对于每个起点 s(1≤s≤n),从站点 s 开始,沿环依次读取偏移量。设无限序列 b1,b2,… 为 a 的循环延拓,即
bi=a((i−1)modn)+1对于步数 t≥1,定义第 t 步的检测码为
Ct=(j=0∑t−1bs+j)modK其中取模结果为标准余数,落在区间 [0,K−1] 内。
起点 s 的最长有效步数 Ls 定义如下:在不超过 n 步的范围内,检测码 C1,C2,…,CLs 必须两两不同。如果 Ls<n,则再取第 Ls+1 步时会出现与之前某个检测码相等的检测码;如果 Ls=n,表示已经取满全部 n 步。检测码只统计 t≥1 的值,出发前状态不计入,因此 Ls 至少为 1。
请计算所有起点的最长有效步数之和:
s=1∑nLs数据约束:测试数据组数不超过 10^5;序列长度 n 和参数 K 均不超过 2 × 10^5;每个偏移量 ai 的绝对值不超过 10^9;所有测试数据的 n 之和不超过 2 × 10^5。
每个测试文件包含多组测试数据。第一行输入一个整数 T(1≤T≤105),表示测试组数。每组测试数据描述如下:
对于每组测试数据,输出一行一个整数,表示该组数据所有起点的最长有效步数之和 ∑s=1nLs。
输入
2
3 5
1 1 1
4 6
2 -1 2 -1
输出
9
14
说明
第一组 n=3、K=5、a=[1,1,1]。前缀余数从 P0=0 开始为 P1=1、P2=2、P3=3、P4=4、P5=0。
起点 1 的窗口 P1,P2,P3 为 1,2,3,全部互不相同,因此 L1=3。起点 2 的窗口 P2,P3,P4 为 2,3,4,也全部互不相同,L2=3。起点 3 的窗口 P3,P4,P5 为 3,4,0,也全部互不相同,L3=3。该组总和为 3+3+3=9。
第二组 n=4、K=6、a=[2,−1,2,−1]。前缀余数为 P1=2、P2=1、P3=3、P4=2、P5=4、P6=3、P7=5。
起点 1 的窗口 P1,P2,P3,P4 为 2,1,3,2,从左往右读到第 4 个时 2 重复,所以 L1=3。起点 2 的窗口为 1,3,2,4,全部不同,所以 L2=4。起点 3 的窗口为 3,2,4,3,第 4 个 3 重复,L3=3。起点 4 的窗口为 2,4,3,5,全部不同,L4=4。该组总和为 3+4+3+4=14。
输入
1
1 10
7
输出
1
说明
边界情况:只有一个站点 n=1。
此时只能走最多 1 步,检测码为 C1=a1modK=7mod10=7。没有更长的可选步数,因此 L1=1,总和为 1。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.