给n个数(每个数都是2的次幂),相同的两个数可以合成一个数(两个 4 可以合成 一个 8),问最终是否会出现 2048
map + 模拟
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
typedef long long ll;
map<ll, int> mp;
int main()
{
int t;
cin >> t;
while(t--)
{
mp.clear();
int n;
cin >> n;
for(int i = 1; i <= n; i++)
{
ll m;
cin >> m;
mp[m]++;
}
for(int i = 1; i < 2048; i = i * 2)
{
mp[i*2] = mp[i*2] + mp[i] / 2;
}
if(mp[2048] > 0)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
return 0;
}