当前位置: 首页 > news >正文

牛客周赛 Round 56 异或故事


题目描述

输入描述:

 

输出描述: 


 

代码:

#include<bits/stdc++.h>using namespace std;int lowbit(int x)
{return x&-x;
}void solve()
{int a;cin>>a;if(a==1){cout<<"2 3"<<endl;}else if(a==1e9){cout<<lowbit(a)<<" "<<a-lowbit(a)<<endl;}else{cout<<1<<" "<<(1^a)<<endl;}
}int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin>>t;while(t--){solve();}return 0;
}

代码讲解:
 

首先,这道题考察位运算中的异或,何为异或,一句口诀,相同为0,不同为1,将数字化为二进制的表示形式,然后让其按位进行异或操作,关于异或我们需要知道,a^b^c=a^(b^c) 
a^0=a, a^a=0,因此这道题,我们就可以 令 b=1, c=1^a, 如果a为奇数,那么1^a= a-1 , 如果a为偶数则,1^a=a+1 为奇数,主要这道题要求b和c 在1到1e9的范围之间,因此,当a=1e9时,c=1e9+1,超过范围了,而a=1时,c=0,也不行,因此a=1 和 a=1e9都需要进行特判,当a=1 时,题目已经给出了2 和 3 了,当a=1e9时,我们使用lowbit来计算,因为,lowbit是找到a二进制表示当中最低位的1,n-lowbit(n) 只改变了最低位的1,只让第x位,由1变为0,lowbit(n) 是只有第x位为1,其它位全部为0,而0对异或没有影响,因此和(n-lowbit(n))进行异或就可以得到 n,只要n不是2的整数次幂即可
 


http://www.mrgr.cn/news/7467.html

相关文章:

  • 1.初识redis
  • 小学分班该如何制作?试试这个方法
  • 小程序商城被盗刷,使用SCDN安全加速有用吗?
  • PostgreSQL大数据量快速模糊检索实践
  • 芯片后端之 PT 使用 report_timing 产生报告 之 -input_pins 选项
  • RPC 调用对比其他通信方式
  • 【C++】异常
  • Stm32通过SPI读写W25QXX
  • 人机环境系统智能中有三种神经网络相互作用
  • 【杨辉三角】打印杨辉三角前10行
  • 2024年架构设计师论文-“大数据处理架构及其应用”
  • 现代网络安全的最新威胁与防御策略深度剖析
  • LeetCode33
  • 大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
  • Flink CDC应用中 mysql 如何开启bin_log日志以及设置bin_log格式
  • springsecurity 在web中如何获取用户信息(后端/前端)
  • 理解Flink算子链
  • Selenium工具使用Python实现下拉框定位操作
  • 定制属于你自己的 Stable Diffusion
  • 5G毫米波测试助力突破高频段设备局限,实现高效外场测试