题目描述
blablabla
样例
blablabla
#include<iostream>
#include<cstring>
typedef long long LL;
using namespace std;
const int N=1010;
LL a[N];
LL s[60][2];
LL m;
int n;
LL get_min(int i) {
LL res=0;
for (int k=i;k>=0;k--) {
res+=min(s[k][0],s[k][1]);
}
return res;
}
int main() {
int T;
cin>>T;
for (int C=1;C<=T;C++) {
cin>>n>>m;
for (int i=0;i<n;i++) cin>>a[i];
memset(s,0,sizeof s);
for (int i=0;i<50;i++) {
for (int j=0;j<n;j++) {
if (a[j]>>i & 1) {
s[i][0]+=1ll<<i;
}
else {
s[i][1]+=1ll<<i;
}
}
}
LL res=0,sum=0;
if (get_min(49)>m) res=-1;
else
{
for (int i=49;i>=0;i--) {
if (sum+get_min(i-1)+s[i][1]<=m) {
res+=1ll<<i;
sum+=s[i][1];
}
else {
sum+=s[i][0];
}
}
}
printf("Case #%d: %lld\n",C,res);
}
return 0;
}