luogu#P10791. 『SpOI - R1』强大到让你们所有人注视

『SpOI - R1』强大到让你们所有人注视

题目描述

本题包含多组测试。

给定一个 nn 位的 kk 进制大数。

S(l,r)S(l,r) 表示截取这个 kk 进制大数从高到低第 ll 位至第 rr 位构成的新 kk 进制数。

你需要求出 1lrnS(l,r)\sum\limits_{1\leq l\leq r\leq n} S(l,r),注意这里的求和也建立在 kk 进制下。

由于答案可能很大,设 (20070720)10(20070720)_{10}kk 进制下是 xx,你只需要输出答案对 xx 取模的结果。

再次提醒:以上所有求和、运算和取值都建立在 kk 进制下。

输入格式

第一行一个整数 TT,表示数据组数。

每组数据第一行两个正整数 n,kn,k,表示这个大数。

每组数据第二行一个数列 aa,从高位至低位依次表示这个大 kk 进制数的每一位上的数。保证 i[1,n],0ai<k\forall i\in[1,n],0\leq a_i<k

输出格式

每组数据一行,表示答案对 xx 取模的结果。由于这也是一个 kk 进制数,所以用空格隔开依次输出每一位。

注意你的输出中不应含有前导零。

1
3 2
1 1 0
1 1 0 1
1
2 20070721
20070720 1
2

提示

样例 #1 解释

所有的 S(l,r)S(l,r)(1)2,(1)2,(0)2,(11)2,(10)2,(110)2(1)_2,(1)_2,(0)_2,(11)_2,(10)_2,(110)_2,把它们在 22 进制下相加得到 (1101)2(1101)_2,再在 22 进制下对 (20070720)10=(1001100100100000101000000)2(20070720)_{10}=(1001100100100000101000000)_2 取模即可得到答案 (1101)2(1101)_2

样例 #2 解释

对于这个数,S(1,1)S(1,1) 显然被 (20070720)20070721(\overline{20070720})_{20070721} 整除,S(2,2),S(1,2)S(2,2),S(1,2)(20070720)20070721(\overline{20070720})_{20070721} 除后都余 11。所以取模后的答案是 (2)20070721(2)_{20070721}

数据范围

本题开启子任务捆绑与子任务依赖。

对于 100%100\% 的数据,1T101\leq T\leq 101n5×1051\leq n\leq 5\times 10^50ai<k1090\leq a_i<k\leq 10^92k1092\leq k\leq 10^9kk 进制大数可能含有前导零。

Subtask TT\leq nn\leq 特殊性质 得分 子任务依赖
1 1010 100100 2525
2 11 5×1035\times 10^3 k>20070720k>20070720 2020
3 8×1038\times 10^3 2525 1,2
4 55 5×1055\times 10^5 3030 1,2,3