CF1624C Division by Two and Permutation

题目描述

给定一个由 $n$ 个正整数组成的数组 $a$。你可以对其进行如下操作: 每次操作可以将数组中的任意一个元素 $a_i$ 替换为 $\lfloor \frac{a_i}{2} \rfloor$,即将 $a_i$ 除以 $2$ 后向下取整。 请判断你是否可以通过若干次(可以为 $0$ 次)操作,使得数组 $a$ 变成 $1$ 到 $n$ 的一个排列——也就是说,数组中恰好包含 $1$ 到 $n$ 的所有整数,每个只出现一次。 例如,如果 $a = [1, 8, 25, 2]$,$n = 4$,那么答案是 YES。你可以这样操作: 1. 将 $8$ 替换为 $\lfloor \frac{8}{2} \rfloor = 4$,此时 $a = [1, 4, 25, 2]$。 2. 将 $25$ 替换为 $\lfloor \frac{25}{2} \rfloor = 12$,此时 $a = [1, 4, 12, 2]$。 3. 将 $12$ 替换为 $\lfloor \frac{12}{2} \rfloor = 6$,此时 $a = [1, 4, 6, 2]$。 4. 将 $6$ 替换为 $\lfloor \frac{6}{2} \rfloor = 3$,此时 $a = [1, 4, 3, 2]$。

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 每个测试用例包含两行。第一行包含一个整数 $n$($1 \le n \le 50$),第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le a_i \le 10^9$)。

输出格式

对于每个测试用例,输出一行: - 如果可以将数组 $a$ 变为 $1$ 到 $n$ 的一个排列,输出 YES; - 否则输出 NO。 YES 和 NO 不区分大小写(例如 yEs, yes, Yes 和 YES 都被认为是肯定回答)。

说明/提示

第一个测试用例的解释见题目描述。 第二个测试用例无法得到一个排列。 由 ChatGPT 4.1 翻译