前言
传送门 :
突然感觉C题不是一般的难
思路
首先我们需要知道的是 数组的总和 不变
并且第一层的状态一定是 : x , x / 2 , ( x − x / 2 ) x,x/2,(x-x/2) x,x/2,(x−x/2)
我们现在知道最终状态
…啊 还是好难说清楚啊
Mycode
map<ll,int> mp;
const int N = 2e5+10;
int n;
/*
x
*/
void solve()
{
cin>>n;
ll sum = 0 ;
mp.clear();
for(int i=1;i<=n;i++ ){
ll x;cin>>x;
mp[x] ++ ;
sum += x;
}
multiset<ll> s;
s.insert(sum);
for(int i = 0;i<n; ){
if(s.empty()) break;
ll t = *s.begin();
if(mp[t] == 0 ){
s.erase(s.find(t));
s.insert(t/2);
s.insert(t - t/2);
i++;
}else{
s.erase(s.find(t));
mp[t] -- ;
}
}
if(s.empty()) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}