返回顶部

哈尔滨理工大学软件与微电子学院程序设计竞赛(同步赛)G.XOR (位运算)

  • 题意:有一个正整数\(n\),从\(1,2,3,...,n-1,n\)中找两个数异或,使得他们的值最大.

  • 题解:需要特判当\(n=1\)的情况,答案只能是\(0\),然后写个几组数不难发现,一定存在两个数使得他们异或后的二进制上每一位都是\(1\),直接模拟即可.

  • 代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <set>
    #include <unordered_set>
    #include <unordered_map>
    #define ll long long
    #define fi first
    #define se second
    #define pb push_back
    #define me memset
    const int N = 1e6 + 10;
    const int mod = 1e9 + 7;
    const int INF = 0x3f3f3f3f;
    using namespace std;
    typedef pair<int,int> PII;
    typedef pair<ll,ll> PLL;
    
    ll n;
    
    int main() {
        ios::sync_with_stdio(false);cin.tie(0);
    	cin>>n;
    	ll t=1;
    	ll res=0;
    	if(n==1){
    		cout<<0<<endl;
    		return 0;
    	}
    	 while(n){
    	 	res+=t;
    	 	t*=2;
    	 	n>>=1;
    	 }
    	 cout<<res<<endl;
    
        return 0;
    }
    
posted @ 2020-06-15 20:15  Rayotaku  阅读(150)  评论(0编辑  收藏  举报