#lg5956. [POI 2017] Podzielno

[POI 2017] Podzielno

[AdditionalFile4909.zip](file://AdditionalFile4909.zip?type=additional_file)

P5956 [POI 2017] Podzielno

题目描述

BB 进制数,每个数字 i∈[0,B)i \in [0,B) 有 aia_i 个。你要用这些数字组成一个最大的 BB 进制数 XX(不能有前导零,不需要用完所有数字),使得 XX 是 B−1B-1 的倍数。 qq 次询问,每次询问 XX 在 BB 进制下的第 kk 位数字是什么(最低位是第 00 位)。

输入格式

第一行包含两个正整数 B,qB,q。

第二行包含 BB 个正整数 a0,a1,a2,...,aB−1a_0,a_1,a_2,...,a_{B-1}。

接下来 qq 行,每行一个整数 kk,表示一个询问。

输出格式

输出 qq 行,每行一个整数,依次回答每个询问,如果那一位不存在,请输出 −1-1。

输入输出样例 #1

输入 #1

3 3
1 1 1
0
1
2

输出 #1

0
2 
-1

说明/提示

对于 100%100\% 的数据,2≤B≤1062\le B\le10^6,1≤q≤1051\le q\le 10^5,1≤ai≤1061\le a_i\le10^6,0≤k≤10180\le k\le10^{18}。

#4909. 「POI2017 R1」整除性 Divisibility

标签: 传统 | 时间限制: 2500 ms | 内存限制: 128 MiB |

题目描述

题目译自 XXIV Olimpiada Informatyczna — I etap Podzielność

最近,Bajtuś 在计算机课上学到了位置计数法。他了解到,人类常用十进制,电脑用二进制,但其实任何大于 1 的自然数 BB 都可以作为计数基础。在这样的系统中,可用数字是 0,1,2,…,B−2,B−10, 1, 2, \ldots, B-2, B-1,一个 kk 位数 ck−1ck−2…c2c1c0c_{k-1} c_{k-2} \ldots c_{2} c_{1} c_{0} 表示:

$$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}$$

比如,在三进制中,201201 表示 2⋅32+0⋅3+12 \cdot 3^{2} + 0 \cdot 3 + 1,也就是十进制的 1919(简写为 2013=1910201_{3} = 19_{10})。

Bajtuś 选了个数 BB 作为计数基础,把所有可用数字写在卡片上,有些数字可能重复:对于 i=0,1,…,B−1i = 0, 1, \ldots, B-1,他有 aia_{i} 张写着 ii 的卡片。他想用这些卡片拼出尽可能大的、能被 B−1B-1 整除的数。请你写个程序帮他实现这个目标。这数可能很大,Bajtuś 只想知道某些特定位置的数字即可。注意,正数的写法不能以 00 开头,00 的唯一写法是 00。

特别说明:若基础 BB 超过 1010,假设数字间有空格分隔,避免混淆。

输入格式

输入第一行包含两个整数 BB 和 qq (B≥2,q≥1)(B \geq 2, q \geq 1),用空格分隔,分别表示计数基础和查询次数。

第二行包含 BB 个整数 a0,a1,…,aB−1a_{0}, a_{1}, \ldots, a_{B-1} (ai≥1)(a_{i} \geq 1),用空格分隔,表示 Bajtuś 拥有的每个数字 ii 的卡片数量。

接下来的 qq 行,每行一个整数 kik_{i} (0≤ki≤1018)(0 \leq k_{i} \leq 10^{18}),表示查询目标数的第 kik_{i} 位。

输出格式

输出 qq 行,第 ii 行给出目标数(用 BB 进制表示、能被 B−1B-1 整除的最大数)的第 kik_{i} 位。位数从右往左数(最低位为 00)。若目标数位数少于 kik_{i},输出 −1-1。

样例

输入

3 3
1 1 1
0
1
2

输出

0
2
-1

在三进制中,有一张 00、一张 11 和一张 22 的卡片,可拼出:03=0100_{3} = 0_{10}、13=1101_{3} = 1_{10}、23=2102_{3} = 2_{10}、103=31010_{3} = 3_{10}、123=51012_{3} = 5_{10}、203=61020_{3} = 6_{10}、213=71021_{3} = 7_{10}、1023=1110102_{3} = 11_{10}、1203=1510120_{3} = 15_{10}、2013=1910201_{3} = 19_{10}、2103=2110210_{3} = 21_{10}。能被 22 整除的有 030_{3}、232_{3}、20320_{3},最大数是 20320_{3}。

附加样例

  1. B=10,ai=1,q=10,ki=i−1B=10, a_{i}=1, q=10, k_{i}=i-1;
  2. B=2,a0=10000,a1=1,q=10001,ki=i−1B=2, a_{0}=10000, a_{1}=1, q=10001, k_{i}=i-1;
  3. B=1000000,ai=1,q=1,k1=999999B=1000000, a_{i}=1, q=1, k_{1}=999999。

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务 附加限制 分值
11 B,ai,q≤100B, a_{i}, q \leq 100 3030
22 B,ai≤100,q≤100000B, a_{i} \leq 100, q \leq 100000 2525
33 B≤1000,ai≤1000000,q≤1000B \leq 1000, a_{i} \leq 1000000, q \leq 1000 2525
44 B,ai≤1000000,q≤100000B, a_{i} \leq 1000000, q \leq 100000 2020