#4909. 「POI2017 R1」整除性 Divisibility
题目描述
题目译自 XXIV Olimpiada Informatyczna — I etap Podzielność
最近,Bajtuś 在计算机课上学到了位置计数法。他了解到,人类常用十进制,电脑用二进制,但其实任何大于 1 的自然数 B 都可以作为计数基础。在这样的系统中,可用数字是 0,1,2,…,B−2,B−1,一个 k 位数 ck−1ck−2…c2c1c0 表示:
$c_{k-1} \cdot B^{k-1} + c_{k-2} \cdot B^{k-2} + \ldots + c_{2} \cdot B^{2} + c_{1} \cdot B + c_{0}$
比如,在三进制中,201 表示 2⋅32+0⋅3+1,也就是十进制的 19(简写为 2013=1910)。
Bajtuś 选了个数 B 作为计数基础,把所有可用数字写在卡片上,有些数字可能重复:对于 i=0,1,…,B−1,他有 ai 张写着 i 的卡片。他想用这些卡片拼出尽可能大的、能被 B−1 整除的数。请你写个程序帮他实现这个目标。这数可能很大,Bajtuś 只想知道某些特定位置的数字即可。注意,正数的写法不能以 0 开头,0 的唯一写法是 0。
特别说明:若基础 B 超过 10,假设数字间有空格分隔,避免混淆。
输入格式
输入第一行包含两个整数 B 和 q (B≥2,q≥1),用空格分隔,分别表示计数基础和查询次数。
第二行包含 B 个整数 a0,a1,…,aB−1 (ai≥1),用空格分隔,表示 Bajtuś 拥有的每个数字 i 的卡片数量。
接下来的 q 行,每行一个整数 ki (0≤ki≤1018),表示查询目标数的第 ki 位。
输出格式
输出 q 行,第 i 行给出目标数(用 B 进制表示、能被 B−1 整除的最大数)的第 ki 位。位数从右往左数(最低位为 0)。若目标数位数少于 ki,输出 −1。
样例
输入
3 3
1 1 1
0
1
2
输出
0
2
−1
在三进制中,有一张 0、一张 1 和一张 2 的卡片,可拼出:03=010、13=110、23=210、103=310、123=510、203=610、213=710、1023=1110、1203=1510、2013=1910、2103=2110。能被 2 整除的有 03、23、203,最大数是 203。
附加样例
B=10, ai=1, q=10, ki=i−1;
B=2, a0=10000, a1=1, q=10001, ki=i−1;
B=1000000, ai=1, q=1, k1=999999。
数据范围与提示
详细子任务附加限制及分值如下表所示。
子任务 |
附加限制 |
分值 |
1 |
B,ai,q≤100 |
30 |
2 |
B,ai≤100, q≤100000 |
25 |
3 |
B≤1000, ai≤1000000, q≤1000 |
4 |
B,ai≤1000000, q≤100000 |
20 |