SRM519 Div1 Easy(250), Div2 Hard(900) BinaryCards

BinaryCards

AとBのビットが異なる最左の位置をkとすると、kビット目より左側を返すことはなく、kビット目と右側は全て表になりうる。

class BinaryCards{public:
long long largestNumber( long long A, long long B )
{
    for ( unsigned long long i=1ull<<63; i!=0; i>>=1 )
        if ( (A&i) != (B&i) )
            return A | ((i<<1)-1);
    return A;
}};