AND 操作的最大值
Maximum value of AND operation
给定两个数字 A 和 B.求对 (P,Q) 的值,使得 A <= P <= B P AND Q 的值为最大值,其中 AND 是二元运算符。有关 AND 运算符的详细信息,请参阅此链接
1<= A < B <=10^18
法典:
int main()
{
int t;
cin>>t;
while(t--){
long long int nearpow =0;
int count=1;
int a ; int b;
cin>>a>>b;
while(nearpow<=b){
nearpow = 1<<count;
count++;
}
nearpow/=2;
if(nearpow==b){
long long int x = b-1;
long long int y = b-2;
if(y>=a) cout<<(x&y)<<endl;
else cout<<(b&x)<<endl;
}else{
long long int max=0;
cout<<(b&(b-1))<<endl;
}
}
return 0;
}
我从这种方法中得到了错误的答案。 我错在哪里?请帮忙
当 b
不是 2 的幂时,你认为答案是 b&(b-1),这是错误的。假设 b 是(a 非常小的假设)1001000,b-1 是 1000111 和他们的 and 是 1000000。但真正的答案是1000111和1000110之间的1000110。
因此,如果它是 2 的幂,您的解决方案是正确的。
如果它不是 2 的幂,那么答案应该是 (b-1)&(b-2),如果 b 不是奇数,否则 b&(b-1)。(除了只有两个数字的极端情况,即如果 a=b-1)
这段代码是用python编写的,但你可以检查这个问题是如何工作的逻辑
T=int(input())
for i in range(T):
A,B=list(map(int,input().split()))
if(B%2==0):
ans=B-2;
else:
ans=B-1;
if(ans>=A):
print(ans)
else:
print(A&B)
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用指针从C++中的数组中获取最大值
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 整数溢出,最大值为 pow(10,19)
- 以C++递归方式查找向量中的最大值
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 如何使用可变参数模板类使用模板元编程获得最大值
- C++不同的最小最大值实现
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 是否可以将无符号 int 的最大值转换为 int 并将结果转换为 -1?
- 查找包含 N 个元素的数组的最小值和最大值
- 井字游戏具有奇怪行为的最小最大值算法(C++)
- 使用软最大值进行操作选择
- AND 操作的最大值