首页 > 其他分享 >关于此题CF[Hello 2025] 2057C - Trip to the Olympiad的一些总结

关于此题CF[Hello 2025] 2057C - Trip to the Olympiad的一些总结

时间:2025-01-05 23:00:31浏览次数:1  
标签:2057C xor int 确定 位置 CF 异或 两个 Trip

传送门
题目大意:给定两个数l,r,试求l~r中选三个数a,b,c,使得\((a xor b) + (b xor c) + (a xor c)\)的值最大。

有关此类异或最大的题目,首先想到的是确定最高位,因为假如说异或后二进制下k位置为1,那么此时答案就已经比k位置不为1,而k以后的位置都是1的情况要大了。而观察l,r这两个数,我们如果想要确定两个数异或之后可能的最高位的1,就一定要找到l与r这两个数二进制下从高位到低位第一个不一样的位置,那么这个位置就是对应的k位置。

找到这个k位置之后,我们发现两个数异或起来的最大值就是\(1+2+2^{2}+...+2^{k}\),也就是异或之后k位置即以后都变成1的情况,由于题目只需要我们找到一组答案即可,那么我们此时其实就已经可以确定答案中的两个数了,即,第一个数为,k以前的位与l,r相同(因为k是从高到低位上l,r第一个不同的位),k位置为1,往后全为0,这样的话这个数一定会小于等于r(因为实际上,k位置上l,r不同,这个位置上一定是r为1,l为0);第二个数为,k以前的位与l,r相同,k位置为0,往后全为1,这样的话这个数一定大于等于l。

那么我们只需要再确定第三个数即可。我们发现,仅仅考虑k位置及其往后的位,不管这第三个数的这些位置上是0还是1,它与前面已经确定的那两个数分别异或之后再加起来,得到的数总是定值,也就是前面提到的\(1+2+2^{2}+...+2^{k}\),所以第三个数只需要在\([l,r]\)范围内随便找一个不是上述确定的两个数的另外一个数即可。

代码如下:

#include<bits/stdc++.h>

using namespace std;

int t,l,r;

void solve() {
    cin >> l >> r;
    int k = 31 - __builtin_clz(l ^ r);
    int a = l | ((1 << k) - 1);
    int b = a + 1;
    int c = (a == l ? r : l);
    cout << a << ' ' << b << ' ' << c << '\n';
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin >> t;
    while(t--) solve();

    return 0;
}

标签:2057C,xor,int,确定,位置,CF,异或,两个,Trip
From: https://www.cnblogs.com/lwiwi/p/18654115

相关文章

  • CF补题 950-Div.3
    CF补题950-Div.3-20250102Dashboard-CodeforcesRound950(Div.3)-CodeforcesA:题目大意:给出一个字符串,要求重复的字母必须\(\gem\),求缺失字母总个数#include<iostream>#include<map>usingnamespacestd;map<char,int>mp;intmain(){ intT; cin>&g......
  • [CF2053E] Resourceful Caterpillar Sequence 题解
    显然两步之内决胜负。否则两个人会来回拉扯,平局。考虑何时Aron会赢。称与叶子结点边距离小于等于\(1\)的结点为【制胜点】。开局\(q\)在叶子,\(p\)不在叶子,直接赢。方案数\(c(n-c)\),其中\(c\)为叶子数量。\(q\)在一个连着【制胜点】的点,\(p\)不在【制胜点】。Nora......
  • [CF2043D] Problem about GCD 题解
    首先的一个观察是可以把\(G\)除掉,转化成\([\lceil\frac{l}{G}\rceil,\lfloor\frac{r}{G}\rfloor]\)中的两个互质数的差最大值。然后的性质非常神奇。令\(l'\gets\lceil\frac{l}{G}\rceil,r'\gets\lfloor\frac{r}{G}\rfloor\)。若\(r'-l'\)充分大,则一定有一组......
  • CF2053F Earnest Matrix Complement
    CF2053FEarnestMatrixComplement题意:多测每次给定\(n,m,k\),存在一个\(n\timesm\)的表格,其中\(a_{i,j}\in{[1,k]\\text{and}\-1}\)令\(c_{i,j}=\sum_{p=1}^m{[a_{i,p}=j]}\)最后\(V=\sum_{i=2}^n\sum_{j=1}^{n\timesm}c_{i-1,j}......
  • 题解:CF1830A Copil Copac Draws Trees
    首先这道题肯定不能暴力枚举,我们要思考其他算法。我们可以给每一条边编一个号。然后从根开始遍历这棵树,当一条边的编号比他祖先到他祖先的祖先的那条边的编号还要小时,就说明顺序错了,要再等一轮。这个就简单了,直接dfs就行,注意答案要加\(1\)。#include<bits/stdc++.h>using......
  • 题解:CF2044D Harder Problem
    CF2044DHarderProblem思路构造一个\(1\simn\)都出现了一次的数列(这样每个数都是众数了),然后只要保证在数组\(a\)里面出现了的数在最前面就好了。AC代码#include<bits/stdc++.h>usingnamespacestd;#defineN200005longlongt,vis[N],cnt,n,a[N];intmain(){ cin......
  • 602 [CF 1385D] a-Good String
    //602[CF1385D]a-GoodString.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/978给你一个长度为n的由小写字母组成的字符串s,保证n=2k,其中k为大于等于零的整数。一个非空字符串s被称为c-good(c为a.........
  • CF1110D Jongmah
    经典题。\(\tt{Link}\)题意你手中有$$\(n\)$$张牌。每张牌上都写着一个介于\(1\)和\(m\)之间的整数。要赢得游戏,需要组成一定数量的三元组。每个三元组由三张牌组成,这样写在牌上的数字要么全部相同,要么连续。例如,\(7,7,7\)和\(12,13,14\)都是有效的三连牌,但\(2,......
  • [CF2353D] Refined Product Optimality 题解
    首先让我们输出的是不操作的值。不定序,一看就很贪心。经过分类分类分类可证,\(a,b\)都是升序(降序)的时候是最优的。再看加操作的。相当于要维护这两个升序序列。我们发现,每次操作影响的值很少,最多两个值。在一个连续段中,修改的值相当于和末尾值交换,再加一。唐点:找这个末尾没必要......
  • CF848E Days of Floral Colours 题解
    Problem-848E-Codeforces首先,由于整个图是对称的,所以我们将其沿直径分为两半,在算一半答案时把每一段的贡献平方再相加即可。(因为对面也有一段相同长度的也要计入贡献)现在我们的问题转化为了对于一个长为\(n\)的环,你可以给一个点连出一个线头(即在原图中连向对面的边)将其余......