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

3099: 简单的小游戏1

时间限制: 1 Sec  内存限制: 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 个整数 s1, s2, …, sn ( 1 ≤ si ≤ 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 。
来源/分类