AND运算的最大值
Maximum value of AND operation
给定两个数字 A 和 B。找到对 (P,Q) 的值,使得 A <= P < Q <= B P AND Q 的值最大,其中 AND 是二元运算符。有关 AND 运算符
的更多信息,请参阅此 link
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[=30 之间的 and =] 和 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。找到对 (P,Q) 的值,使得 A <= P < Q <= B P AND Q 的值最大,其中 AND 是二元运算符。有关 AND 运算符
的更多信息,请参阅此 link1<= 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[=30 之间的 and =] 和 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)