1 条题解
-
0
根据部分分的提示,很容易想到这样一件事:
只要三个数字在二进制下某一位上不全是或者全是,则这一位可以达到理论最大值。
所以我们直接暴力从高到低,枚举到一位使得二进制下第位不同。
这时候,我们一个数字构造,一个数字构造。另一个数字随便构造谁即可。
#include<bits/stdc++.h> #define ll long long #define maxn 100005 #define mod 998244353 using namespace std; int l,r; void work() { cin>>l>>r; int now=0; for (int i=29;i>=0;i--) { if (((l>>i)&1) != ((r>>i)&1)) { int a=now|(1<<i),b=a-1; for (int j=r;j>=l;j--) if (a!=j && b!=j) { cout<<a<<" "<<b<<" "<<j<<endl; return; } } else if ((l>>i)&1) now|=(1<<i); } } int main() { int T; cin>>T; while (T--) work(); }
- 1
信息
- ID
- 1758
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 34
- 已通过
- 4
- 上传者