1 条题解

  • 0
    @ 2025-1-8 16:19:50

    根据部分分的提示,很容易想到这样一件事:

    只要a,b,ca,b,c三个数字在二进制下某一位上不全是11或者全是00,则这一位可以达到理论最大值。

    所以我们直接暴力从高到低,枚举到一位ii使得l,rl,r二进制下第ii位不同。

    这时候,我们一个数字构造xxxxx1000000xxxxx1000000,一个数字构造xxxxx0111111xxxxx0111111。另一个数字随便构造谁即可。

    #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
    上传者