社区讨论
求助!P6747
灌水区参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lqoqw251
- 此快照首次捕获于
- 2023/12/28 13:09 2 年前
- 此快照最后确认于
- 2023/12/28 17:08 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,a[114514],b[114514],q;
long long c=0,two[114];
two[0]=1;
for(int i=1;i<=60;i++){
two[i]=two[i-1]*2;
}
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i];
c=a[i]+c;
}
long long dsb[114],l=0;
for(int i=1;i<=n;i++){
int j=0;
while(b[i]){
if(b[i]%2){
dsb[j]++;
}
b[i]=b[i]/2;
j++;
}
}
for(int i=30;i>0;i--){
if(dsb[i]){
l=i;
break;
}
}
cin>>q;
while(q){
long long m,k[114],add=c;
cin>>m;
//cout<<c<<"<>";
for(int i=60;i>=0;i--){
if(add+two[i]*(n-2*dsb[i])<=m){
k[i]=1;
//cout<<"I";
add=add+two[i]*(n-2*dsb[i]);
}else{
k[i]=0;
//cout<<"O";
}
//cout<<"add="<<add<<"dbs="<<two[i]<<endl;
}
long long k1=0;
for(int i=60;i>=0;i--){
k1=k1*2;
k1=k1+k[i];
}
if(k1==0&&c>m) cout<<-1<<endl;
else cout<<k1<<endl;
q--;
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...