#HK5382. 「OOI 2022 Day 2」完整数组

「OOI 2022 Day 2」完整数组

题目描述

题目译自 Open Olympiad in Informatics 2022 Day2 T2 「Целостный массив / Integral Array

给定一个包含 nn 个正整数的数组 aa,元素编号从 11nn。如果对于数组中任意两个(不一定不同)的数字 xxyy,当 xyx \geq y 时,xy\left \lfloor \frac{x}{y} \right \rfloorxx 除以 yy 的商,向下取整)也在该数组中,则称该数组为完整数组

已知数组 aa 中的所有数字均不超过 cc。你的任务是检查给定数组是否为完整数组。

输入格式

每个测试点包含多组输入数据。第一行包含一个整数 tt (1t10000)(1 \leq t \leq 10000),表示输入数据的组数。接下来是各组数据的描述。

每组数据的第一行包含两个整数 nncc (1n106,1c107)(1 \leq n \leq 10^{6}, 1 \leq c \leq 10^{7}),分别表示数组 aa 的大小和数组中数字的上限。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n (1aic)(1 \leq a_i \leq c),表示数组 aa 的元素。

NN 表示所有数据组中 nn 的总和,CC 表示所有数据组中 cc 的总和。保证 N106N \leq 10^{6}C107C \leq 10^{7}

输出格式

对于每组输入数据,如果数组是完整的输出 Yes,否则输出 No

3
3 5
1 2 5
4 10
1 3 3 7
1 2
2

Yes
No
No

在第一组输入数据中,可以看出数组是完整的:

  • 11=1\left \lfloor \frac{1}{1} \right \rfloor = 1a1=1a_1 = 1,该数字在数组中;
  • 22=1\left \lfloor \frac{2}{2} \right \rfloor = 1
  • 55=1\left \lfloor \frac{5}{5} \right \rfloor = 1
  • 21=2\left \lfloor \frac{2}{1} \right \rfloor = 2a2=2a_2 = 2,该数字在数组中;
  • 51=5\left \lfloor \frac{5}{1} \right \rfloor = 5a3=5a_3 = 5,该数字在数组中;
  • 52=2\left \lfloor \frac{5}{2} \right \rfloor = 2a2=2a_2 = 2,该数字在数组中。

因此,条件满足,数组是完整的。

在第二组输入数据中,可以注意到:

  • $\left \lfloor \frac{7}{3} \right \rfloor = \left \lfloor 2\frac{1}{3} \right \rfloor = 2$,但 22 不在数组 aa 中,因此数组不是完整的。

在第三组输入数据中:

  • 22=1\left \lfloor \frac{2}{2} \right \rfloor = 1,但数组中只有数字 22,因此数组不是完整的。

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖 备注
11 1313 N100N \leq 100 00
22 1717 N100000N \leq 100000C10000C \leq 10000 00
33 1515 N1000N \leq 1000 0,10, 1
44 2727 N100000N \leq 100000 030 \sim 3
55 2828 040 \sim 4