news 2026/8/12 10:25:56

百度笔试真题-最小对冲值(C++/Py/Java /Js/Go)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
百度笔试真题-最小对冲值(C++/Py/Java /Js/Go)

最小对冲值

百度技术岗 笔试真题 8月6号 第二题

题目内容

调度模块要把一个非负整型额度mmm拆成两份:任选整型yyy0≤y≤m0 \le y \le m0ym),另一份为m−ym-ymy。定义这次拆分的「对冲值」为
G(y)=y⊕(m−y)G(y)=y \oplus (m-y)G(y)=y(my)
其中⊕\oplus为按位异或(对应二进制位相同得000、不同得111)。例如6 (1102)6\ (110_2)6(1102)1 (0012)1\ (001_2)1(0012)满足6 xor 1=7 (1112)6\ \text{xor}\ 1 = 7\ (111_2)6xor1=7(1112)。现给定若干个额度,请对每个mmm求出可取到的最小对冲值。

输入描述

第一行一个整型nnn(1≤n≤105)(1 \le n \le 10^5)(1n105),表示随后有nnn行额度。
接下来nnn行,每行一个整型mmm(1≤m≤1018)(1 \le m \le 10^{18})(1m1018)
请对每个mmm逐一计算其最小对冲值。

输出描述

共输出nnn行;对于每一个mmm,写出一个非负整型,即
min⁡(0⊕m, 1⊕(m−1), 2⊕(m−2), …, m⊕0)\min\bigl(0\oplus m,\ 1\oplus(m-1),\ 2\oplus(m-2),\ \ldots,\ m\oplus 0\bigr)min(0m,1(m1),2(m2),,m0)

样例1

输入

3 4 5 11

输出

0 1 3

说明
三个额度依次为4,5,114,5,114,5,11:取y=2y=2y=22⊕2=02\oplus 2=022=0;取y=2y=2y=22⊕3=12\oplus 3=123=1;取y=4y=4y=44⊕7=34\oplus 7=347=3

样例2

输入

2 2 7

输出

0 7

说明
额度222:取y=1y=1y=11⊕1=01\oplus 1=011=0。额度777:枚举可知最小对冲值为777

题解

思路

数学原理

  1. 二进制加法公式a + b = (a ^ b) + 2 * (a & b)=>a ^ b = a + b - 2 * (a & b)
  2. 对应到此题中y ^ (m - y) = m - 2 * (y & (m - y))最小值就是让y & (m - y)尽可能大。就是让两个数接近。所以选择两个数分别为m /2(m + 1) /2

C++

#include<bits/stdc++.h>usingnamespacestd;intmain(){ios_base::sync_with_stdio(false);cin.tie(nullptr);intT;cin>>T;while(T--){intm;cin>>m;cout<<((m/2)^((m+1)/2))<<endl;}return0;}

java

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intT=sc.nextInt();while(T-->0){intm=sc.nextInt();System.out.println((m/2)^((m+1)/2));}sc.close();}}

python

importsys# 读取输入data=sys.stdin.read().split()T=int(data[0])idx=1whileT>0:m=int(data[idx])idx+=1print((m//2)^((m+1)//2))T-=1

javascript

constreadline=require("readline");constrl=readline.createInterface({input:process.stdin,output:process.stdout});letinput=[];rl.on("line",function(line){input.push(...line.trim().split(/\s+/));});rl.on("close",function(){letidx=0;letT=Number(input[idx++]);console.log(T);while(T>0){T--;letm=Number(input[idx++]);console.log((Math.floor(m/2))^(Math.floor((m+1)/2)));}});

Go

packagemainimport("bufio""fmt""os")funcmain(){in:=bufio.NewReader(os.Stdin)varTintfmt.Fscan(in,&T)out:=bufio.NewWriter(os.Stdout)deferout.Flush()forT>0{varmintfmt.Fscan(in,&m)fmt.Fprintln(out,(m/2)^((m+1)/2))T--}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/12 10:24:30

Ubuntu 20.04 磁盘分区实战指南:从原理到双系统安装

1. 项目概述&#xff1a;为什么磁盘分区是Ubuntu安装的“定海神针” 如果你正准备在实体机或虚拟机上安装Ubuntu 20.04&#xff0c;并且已经走到了选择“安装类型”或“磁盘分区”这一步&#xff0c;那么恭喜你&#xff0c;你正站在整个安装过程中最关键、也最容易让人犹豫不决…

作者头像 李华
网站建设 2026/8/12 10:24:06

Mac双系统忘记Windows密码?安全重置指南与风险规避

1. 项目概述&#xff1a;当双系统遇上遗忘的密码在苹果电脑上安装Windows双系统&#xff0c;享受Mac OS的优雅与Windows的广泛兼容性&#xff0c;是很多用户兼顾工作与娱乐的经典选择。无论是通过Boot Camp还是第三方引导工具&#xff0c;这种“一机两用”的方案都极大地扩展了…

作者头像 李华
网站建设 2026/8/12 10:22:29

彻底解决“学完就忘”:网安专属长期记忆知识固化学习法

一、95%新人的通病&#xff1a;学得多、忘得快、留存极低很多人学网安最大的困扰&#xff1a;当时看懂了、当时复现成功了、过三天完全忘光&#xff0c;再过一周彻底归零。反复学、反复忘、反复从零开始&#xff0c;陷入无限循环内耗。这不是你笨&#xff0c;是你没有用网安专属…

作者头像 李华
网站建设 2026/8/12 10:21:58

解决Chrome并行配置错误:VC++运行库修复与Windows SxS机制详解

1. 问题现象与初步诊断 如果你也遇到了在Windows系统上双击Google Chrome图标&#xff0c;却弹出一个令人沮丧的错误窗口&#xff0c;提示“C:\……chrome.exe应用程序无法启动&#xff0c;因为应用程序的并行配置不正确”&#xff0c;那么你并不孤单。这个错误通常伴随着一个建…

作者头像 李华