首页 > 其他分享 >牛客练习赛130-A题题解

牛客练习赛130-A题题解

时间:2024-10-18 22:33:28浏览次数:1  
标签:10 0010 题解 long 牛客 130 操作 我们

牛客练习赛130-A题题解

题目描述如下:

给定两个整数 x,y,jackle 希望把 x 变成 y

他每次可以进行如下两种操作之一:

  • 选择任意一个整数 z,令 x=x&z。
  • 选择任意一个整数z,令x=x|z。

请问最少操作几次可以把 x 变成 y

输入描述:

本题有多组测试数据。

第一行输入 1个正整数 T(1≤T≤10^5) ,表示数据组数。

接下来 T 行,每行 2 个整数 x,y(0≤x,y≤10^18)。

输出描述:

对于每组测试数据,输出最少操作次数。

示例

输入
2
0 0
0 1
输出
0
1

解题思路:

我们阅读题面可以发现,看到”最少操作次数“这样的描述,我们就可以看出来这是一道贪心的思维题。

那我们先思考一下,我们先看x和y的范围是0到10^18,因此我们要给x,y开long long,这里的输入输出并没有很多,所以用不着快读。

接下来,我们想想,题目给我们限制了两种操作方式,一个是位与"&"操作,一个是位或"|"操作,那么当x==y的时候,我们直接输出0就可以。

若x!=y,我们如果想把x变成y,是不是只需要先让x=x&0,在让x=x|y,就可以了。比如: 2=0010,5=0101,我们首先将2=2&0,2就变成了0,0=0|5,0就变成了5,所以最多只需要2步即可。

到这就完了?还没有,我们还需要考虑1的情况,比如说2=0010,3=0011,他们只有一位不同,那么2=3,是不是只需要让2=2|3就可以了,也就是只需要1步。那我们如何思考这个判断条件呢?

第一个例子,p=x&y,x=2,y=3,

p=2&3,0010&0011=0010,所以p=2=x。

第二个例子,p=x&y,x=11,y=10,

p=11&10,1011&1010=1010,.p=10=y

你发现了什么?是不是只要判断x&y等于x或者x&y等于y,就能知道是不是只需要1步了?

AC代码如下:

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
int t;
int main()
{
    cin>>t;
    
    while(t--){
        ll x,y;
        cin>>x>>y;
        
        ll p;
		
		p=x&y;
		
		if(x==y){
			cout<<0<<endl;
		}else if(p==x||p==y){
			cout<<1<<endl;
		}else{
			cout<<2<<endl;
		}
		
    }

    
    
}


标签:10,0010,题解,long,牛客,130,操作,我们
From: https://www.cnblogs.com/xie-blog/p/18475166

相关文章

  • [ABC134F] Permutation Oddness 题解
    T5[ABC134F]PermutationOddness很无敌的一道题。(好像是我第一次用无敌这个词把\(p_i\)和\(i\)的对应关系转化为球和盒子的配对问题,则原式中的绝对值顺利成章地就变成类似距离的一个东西。那么设\(f_{i,j,k}\)表示前\(i\)个球和盒子(注意球和盒子是一起考虑的,所以\(i......
  • [ARC185D] Random Walk on Tree 题解
    一个很套路的做法。思路题目要求走完整个树的时间,这并不好算,容易想到min-max容斥。依据min-max容斥,我们可以轻松把它转化成第一次走到所有子集的时间。考虑在这道题中,有什么特殊的。第一,任何包含根节点的子集答案都是零。第二,由于我们只关心第一次走到的点的时间,因此假......
  • ZZJC新生训练赛第五场题解
    A题思路题目要求构造一个相邻两项互质的长度为n的序列。可以直接选择输出从1到n的自然数序列,因为相邻的自然数总是互质的。题目有多个测试用例,因此需要逐个处理输入,并输出对应结果。代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_wit......
  • 题解:[YNOI2019] 游戏
    ProblemLink[YNOI2019]游戏题外话第一眼,由乃?不打不打。第二眼,欸noi三个字母怎么是大写(才发现是云南省选)。题意题意简洁,不再赘述。Solution一眼看出概率dp,但如何似乎没思路?开始公式做题:设置状态+推转移式。\(Q1\):怎么设置状态?首先,思考一个问题:第\(k\)个人该怎么“......
  • C - sum(牛客小白月赛102)
    题目链接:C-sum题目描述:示例说明:解:这题典型的贪心问题,是求最小的操作次数。首先我们可以先算出这n个数的和s,s和sum的大小有三种情况。当s=sum时,一个数字也不用修改,答案为0。而剩下的两种情况可以合为一种情况来做。首先我们要知道如果把这n个数都变为相反数,则s也会变为......
  • 异常问题解决
    异常:java程序编译或运行过程中出现的问题Throwable:Error:表示非常严重的问题,自己无法解决的问题Exception:除了RuntimeException其它异常【编译时期异常】:一般指的是异常尚未处理就编译了RuntimeException【运行时期异......
  • PTA L1系列题解(C语言)(L1_081 -- L1_088)
    L1-081今天我要赢题目内容:2018年我们曾经出过一题,是输出“2018我们要赢”。今年是2022年,你要输出的句子变成了“我要赢!就在今天!”然后以比赛当天的日期落款。输入格式:本题没有输入。输出格式:输出分2行。在第一行中输出I'mgonnawin!Today!,在第二行中用年年年......
  • P1955 程序自动分析 题解
    P1955程序自动分析一道并查集的裸题,并查集存储传递性,后判断。主题思路十分简单,重点在于离散化与离线的处理。离散化,为什么会想到离散化呢,观察数据范围\(1<i,j<{10}^9\),数据范围过大,导致数组不可能开到\(1e9\)但是\(1<n<1e5\)考虑到每次输入只有两个数,若每个数都两两不同,......
  • 【题解】[Codechef] Beautiful Permutation
    传送门以此纪念我场切的dp。这种计数的类型一看就很dp的样子。考场上一开始设的dp状态是\(dp_{i,j,k_1,k_2,0/1}\)表示将前\(i\)个数分为\(j\)段,放了\(k_1\)个偶数,\(k_2\)个奇数,当前段为偶数段或奇数段的方案数。考虑如何转移,记\(cnt_0\)表示序列中可填入的偶数......
  • Codeforces Round 892 (Div. 2)题解记录
    题目链接:https://codeforces.com/contest/1859A.UnitedWeStand选最大的数即可注意题目输出格式 #include<iostream> #include<string.h> #include<map> #include<vector> #include<set> #include<unordered_set> #include<stack> #incl......