首页 > 其他分享 >牛客周赛 Round 56 C题异或故事

牛客周赛 Round 56 C题异或故事

时间:2024-08-20 14:54:18浏览次数:12  
标签:周赛 cout 56 特判 非零 牛客 异或 1e9 我们

链接:https://ac.nowcoder.com/acm/contest/88392/C

这题考察的知识点是异或。

关于异或,我们应该掌握以下知识点:

1.两个相同的数异或的结果为0;
2.0和任意一个非零的数异或的结果都是那个非零实数本身;
3.a^b^c=a^(b^c)=(a^b)^c;
4.d=a^b^c-->a=d^b^c;
5.a^b^a=b;
6.a^b=b^a.
7.负数和正数异或的结果为负数,负数和负数异或的结果为正数。

题目给出了一个正整数a,要求我们找出两个数b和c,b和c异或的结果等于a。那我们要怎么找出这两个数呢?

思路一:根据公式我们知道a=b^c可以推出b=a^c。由于a是已知的,所以我们可以令c=1,那么很容易就可以得到b是多少了。如果a是奇数,那么b=a^1=a-1;如果a是偶数,那么b=a^1=a+1,从而我们就可以知道b和c的值是多少了。

思路二:

我们知道0和任意一个非零的数异或的结果都是那个非零实数本身,那么我们是不是可以让b或者c等于0,另一个数等于a就好了。按理说应该是可以的,但是题目要求b和c必须为正整数,所以行不通。但是我们知道a^b^c=a^(b^c)=(a^b)^c,那么我们可以构造一个0出来,也就是0=1^1。所以1^1^a=0^a=a,即b=1,c=(1^a)。

但是由于题目的范围限制,b和c的范围在[1,1e9],所以我们需要特判两个零界点。当a=1时,由于a为奇数,所以当c=1时,b会等于a-1=0,不满足题目要求,所以我们要特判一下。当a=1e9时,由于1e9为偶数,所以当c=1时,b会等于a+1=1e9+1,又越界了,所以这里也要特判。

AC code:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int a;

signed main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);

    cin >> t;
    while (t--) {
        cin >> a;

        if (a == 1) {
            cout << 2 << " " << 3 << '\n';
            continue;
        }

        if (a == 1000000000) {//因为1和偶数a异或会得到a+1,而a+1越界了,所以此处需要特判
            cout << 999999999 << ' ' << 1023 << '\n';
            continue;
        }

        cout << 1 << " " << (1 ^ a) << '\n';
        // 1 ^ ( 1 ^ a ) = ( 1 ^ 1 ) ^ a = 0 ^ a = a
    }

    return 0;
}

写的可能有点啰嗦了,但是也是为了尽可能把思路弄清楚明白一些...不足的地方希望大家多多包涵。

标签:周赛,cout,56,特判,非零,牛客,异或,1e9,我们
From: https://blog.csdn.net/2301_79772108/article/details/141357937

相关文章

  • Oracle RAC 集群启动顺序 转发:https://www.modb.pro/db/1824295923545612288?utm_s
    前言前几天使用脚本在RockyLinux9.4安装Oracle11GR2RAC,安装完之后发现集群无法正常启动,后经过分析发现原来是因为RHEL9版本默认安装移除了 initscripts 软件包,需要人为手动安装,在RHEL8之前是默认安装的。在分析问题的过程中,顺便对OracleRAC集群启动顺序进行了更......
  • delphi加密C#解密(AES-256)
    因为公司内部业务需要,用delphi加密的内容(流和字符串)要用C#解密,因为不懂delphi,我这里只是问同事要了代码,贴上delphi加密:共两个文件(AES.pas和ElAES.pas)AES.pas:(**************************************************************)(*......
  • RK3568调试YT8531单网口千兆以太网PHY芯片,GAMC调试
    异常现象当硬件上使用YT8531替代Realtek瑞昱的RTL8211之后,出现系统能够正确识别ETHx,也能设置IP地址,但是外部无法ping成功或者重启后IP地址还会丢失的问题;硬件排查思路检查电源:输入3.3v;输出1.1v,RGMII的电平配置是否如设计预期(1.8v/2.5v/3.3v),尤其RGMII电平配置为3.3......
  • 牛客网习题——通过C++实现
    一、目标实现下面4道练习题增强C++代码能力。1.求1+2+3+...+n_牛客题霸_牛客网(nowcoder.com)2.计算日期到天数转换_牛客题霸_牛客网(nowcoder.com)3.日期差值_牛客题霸_牛客网(nowcoder.com)4.打印日期_牛客题霸_牛客网(nowcoder.com)二、对目标的实现 1.求1+2+3+......
  • P6222 「P6156 简单题」加强版
    P6222「P6156简单题」加强版\(T\)组询问。一开始给定一个常数\(m\)。每次询问单独给定\(n\)。请你求出:\(\sum_{i=1}^{n}\sum_{j=1}^{n}(i+j)^m\gcd(i,j)\mu^2(\gcd(i,j))\pmod{2^{32}}\)枚举k=(i,j)\(\displaystyle\sum_{k}k\mu^{2}(k)\sum_{i=1}^{n/k}\sum_{j=1}^......
  • 题解:牛客周赛 Round 56(A-E)
    A面包店故事题面小镇上有一家面包店,面包以\(x\)元的价格出售,加\(y\)元可以多加几块培根。小歪带着\(n\)元来到了面包店,他想知道自己能不能买到加培根的面包?输入在一行上输入三个整数\(x,y,n\left(1\lex,y,n\le100\right)\)代表面包的价格、培根的价格和小歪带的......
  • 牛客周赛 Round 56
    牛客周赛Round56\(A\)牛客NC277678面包店故事\(AC\)选择结构。点击查看代码intmain(){intx,y,n;cin>>x>>y>>n;if(x+y<=n){cout<<"YES"<<endl;}else{cout<<"NO&qu......
  • LeetCode 556. 下一个更大元素 III(next_permutation())
    题目:556.下一个更大元素III思路:用到next_permutation(),细节看注释。next_permutation、prev_permutationclassSolution{public:intnextGreaterElement(intn){ //转变为string类型,便于调用next_permutation()strings=to_string(n);......
  • 【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】019 - RK3568 Uboot 完整流程梳理
    【OpenHarmony4.1之U-Boot2024.07源码深度解析】019-RK3568Uboot完整流程梳理一、系统环境初始化:_start入口地址,初始化CPU环境二、系统环境初始化:_main入口,初始化堆栈,初始化gd全局环境变量,初始化CRuntime运行环境,开始执行board_init_f函数三、board_......
  • PHP智能问诊导诊平台-计算机毕业设计源码75056
    摘 要智能问诊导诊平台作为一种智能化医疗服务工具,利用PHP语言开发,旨在为用户提供便捷的在线问诊和导诊服务。该平台集成了智能算法和医疗数据,实现了智能化的病情诊断和治疗建议,帮助用户更快速地获取医疗信息和建议。用户可以通过平台进行在线问诊,查看医院新闻,浏览医生信息......