问题3099--简单的小游戏1

3099: 简单的小游戏1

时间限制: 1Sec 内存限制:256 MB
提交:585 解决:142
[ 状态] [ 讨论版] [ 提交] [命题人: ]
题目描述
您正在玩一个变体游戏 2048。最初您有一个由 n个整数组成的多集合 s。这个多集合中的每个整数都是 2 的幂。

您可以对这个多集合进行任意数量(可能是零)的运算。

在每次运算中,你都要从 s 中选择两个相等的整数,将它们从 s 中移除,并将与它们的和相等的数插入 s 中。

例如,在 s={1,2,1,1,4,2,2} 中选择整数 2 和 2,那么多集就变成了 {1,1,1,4,4,2} 。

如果数字 2048 属于您的多集合,您就赢了。
例如,如果是 s={1024,512,512,4} ,你可以通过以下方法获胜:选择 512 和 512 ,你的多集就变成了 {1024,1024,4} 。
然后选择 1024 和 1024 ,你的多集变成 {2048,4} ,你就赢了。

你必须确定自己能否赢得这盘棋。

您必须回答 q 个独立的问题。

输入
第一行包含一个整数 q ( 1 ≤ q ≤ 100 ) - 查询次数。

每个查询的第一行包含一个整数 n ( 1 ≤ n ≤ 100 ) - 多集合中的元素个数。

每个查询的第二行包含 n 个整数 s 1, s 2, …, s n( 1 ≤ s i≤ 1000000000 ) - 多集合中元素的描述。保证多集的所有元素都是 2 的幂次。
输出
对于每个查询,如果可以在多集中获得数字 2048 ,则打印 "yes",否则打印 "no"。

样例输入 Copy
6 4 1024 512 64 512 1 2048 3 64 512 2 2 4096 4 7 2048 2 2048 2048 2048 2048 2048 2 2048 4096
样例输出 Copy
yes yes no no yes yes
提示
在第一个谜题中,您可以通过以下方式获胜:选择 512 和 512 , s 变成 {1024,64,1024} 。然后选择 1024 和 1024 , s 变成 {2048,64} ,您就赢了。

在第二个疑问句中, s 最初包含 2048 。
来源/分类