谷的月赛签到题
实在挑不出来了
求助大佬帮忙看看哪个地方有错误
跪谢
#include <bits/stdc++.h>
#define ll unsigned long long
using namespace std;
const int maxn = 1e+5+100;
ll n,q;
ll m,mn,res;
ll a[maxn],cnt[maxn];
int main(){
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
for(int j=0;j<=60;++j){
if((1ull<<j) &a[i]) ++cnt[j];
}
}
for(int i=0;i<=60;++i){
mn += (1ull<<i) * min(cnt[i],n-cnt[i]);
res += (1ull<<i)*(cnt[i]>=n-cnt[i]);
}
cin>>q;
while(q--){
cin>>m;
if(mn>m){
printf("-1\n");
continue;
}
ll ans=res,mnn=mn;
for(int i=60;i>=0;--i){
if(((1ull<<i)&ans )==0){
if((mnn+(1ull<<i)*(max(n-cnt[i],cnt[i])-min(n-cnt[i],cnt[i]))) <=m){
mnn+=(1ull<<(i))*(max(n-cnt[i],cnt[i])-min(n-cnt[i],cnt[i]));
ans+=(1ull<<(i));
}
}
}
cout<<ans<<'\n';
}
return 0;
}