nyoj744(位运算)

Posted ygeloutingyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nyoj744(位运算)相关的知识,希望对你有一定的参考价值。

题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=744

思路:a^b可以得到a~b间任意两个数异或运算的长度的最大值,设为n,答案为:pow(2, n)-1;

(1):如果a,b长度相同的话,假设a^b得到的最高为1的位置为q(前面都是1异或值为0),我们可以通过对q前面的高位数退位得到q后面的数的所有情况,一定存在一种情况使得异或运算后q后面的数全部为1,此时得到最大值为pow(2, n)-1;

(2):如果a, b长度不同的话,那么a~b间任意两个数异或能得到最大的长度即为b的长度,设为n,那么一定存在一个数x使得x^b的结果二进制全部为1,即长度为n且所有位都为1,十进制表示为pow(2, n)-1;因为我们可以同过对b首位1退位得到满足上述条件的x;

 

代码:

 1 #include <bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 
 5 int main(void){
 6     ll a, b;
 7     while(~scanf("%lld%lld", &a, &b)){
 8         ll c=a^b;
 9         int ans=0;
10         while(c){
11             c/=2;
12             ans++;
13         }
14         cout << (ll)(pow(2, ans)-1) << endl;
15     }
16     return 0;
17 }

 

以上是关于nyoj744(位运算)的主要内容,如果未能解决你的问题,请参考以下文章

NYOJ128 前缀式计算 栈

nyoj 62-笨小熊(以对应数组中的ASC位 + 1)

NYOJ--128--前缀式计算(表达式求值)

NYOJ题目96 n-1位数

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。