题解 | 76选数

76选数

https://www.nowcoder.com/practice/527f85bf9c9c4b74aa4e3ed889c63429

#include <iostream>
using namespace std;

int main() {
    long long n;
    cin>>n;
    unsigned long long mask = 1;
    while(mask<n){
        mask = (mask<<1)|1;
    }//通过按位或运算,找到一个二进制数有效位和n一样长的mask
    n = n | mask;//纯属多余,直接输出mask即可。
    cout<<n;
}

对于一个长度为n的排列,最大值n的二进制数的有效位一定是最长的,而且排列中的所有数通过任意的按位异或运算,得到的二进制数有效位不会超过n的二进制数有效位,所有只需要让n中所有的0通过按位异或运算变成1,那么这个数一定是最大的;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务