求助QAQ调了三个小时了
查看原帖
求助QAQ调了三个小时了
218405
_CHO楼主2020/8/12 23:09

谷的月赛签到题

实在挑不出来了

求助大佬帮忙看看哪个地方有错误

跪谢

#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;
}
2020/8/12 23:09
加载中...