可以类似数位DP
然后Po姐 的构造好劲啊 Orz
http://blog.csdn.net/popoqqq/article/details/48006557
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
inline int lowbit(int x){
return x&-x;
}
inline int digit(int x)
{
int ret=0;
while(x) ++ret,x>>=1;
return ret;
}
inline int count(int x)
{
int ret=0;
while(x) x-=lowbit(x),++ret;
return ret;
}
#define fill(x) ((1<<(x))-1)
#define bit(x) (1<<(x))
int x,y,z,K;
int ans;
int main()
{
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
scanf("%d%d%d",&x,&y,&z);
K=max(max(digit(x),digit(y)),digit(z));
x=count(x); y=count(y); z=count(z);
if(x<y) swap(x,y);
if(z<=y)
ans=fill(x)+(fill(z)|(fill(y-z)<<x));
else if(z<=x)
ans=fill(x)+(fill(y)<<(z-y));
else if(z<=x+y)
ans=(fill(x)<<(z-x))+(fill(z-x)|(fill(x+y-z)<<(z+z-x-y)));
else
ans=-1;
if(digit(ans)>K) ans=-1;
printf("%d\n",ans);
return 0;
}