我们可以对每个数执行若干次操作,即不断做:
x←⌊2x⌋问题就变成:
小 Q 有一个长度为 n 的整数序列 b1,b2,…,bn。他可以对该序列执行任意多次(包括 0 次)如下操作:
选择一个下标 i(1≤i≤n),并将 bi 替换为 ⌊2bi⌋。
其中 ⌊x⌋ 表示对 x 向下取整。我们称一个长度为 n 的序列是“完美的”,当且仅当它恰好包含 1 到 n 之间的每一个整数各一次。
小 Q 想知道,是否存在一个操作序列,使得最终得到的序列是一个完美序列?
约束:测试用例的数量 T 不超过 104。每个序列的长度 n 不超过 2×105,且所有测试用例的 n 之和也不超过 2×105。序列中的每个元素均为不超过 109 的非负整数。
第一行包含一个整数 T,表示测试用例的数量。 接下来每两行描述一组测试用例:
对于每组测试用例,输出一行答案。如果可以经过操作使序列变为完美序列,输出 YES;否则输出 NO。输出的大小写形式可以任意选择。
输入
1
3
3 4 8
输出
YES
说明
序列为 [3, 4, 8]。
将数字从大到小处理:
8 执行两次除以 2 的操作:8→4→2,得到 2,在 1 到 3 范围内且未被占用,于是占用 2。4 执行操作:4→2(被占用)→1,得到 1 并占用。3 原本就在范围内且未被占用,直接占用 3。最终得到的数字集合为 {1, 2, 3},可以构成完美序列,因此输出 YES。
输入
1
3
1 1 1
输出
NO
说明
序列为 [1, 1, 1]。
从大到小处理(均为 1):
1 未被占用,直接占用 1。1 发现 1 已被占用,执行除以 2 的操作:⌊1/2⌋=0,变成 0。1 同样变成 0。由于 0 不能作为排列中的有效数字,无法得到 2 和 3,因此无法构成完美序列,输出 NO。
输入
1
1
5
输出
YES
说明
序列为 [5]。
n=1 时的完美序列就是 [1]。
5 可以通过两次操作变为 1:5→⌊5/2⌋=2→⌊2/2⌋=1。
可以达成目标,因此输出 YES。
输入
1
1
0
输出
NO
说明
序列为 [0]。
n=1 时的完美序列是 [1],但 0 无论执行多少次除以 2 的操作都始终为 0:⌊0/2⌋=0。
无法得到 1,因此输出 NO。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.