牛客小白月赛 103 C 题题解

题目链接

题目大意

给定一个正整数 n n n,求 mex ( { i ⊕ j ∣ i ∈ 1 , n , j ∈ 1 , n } ) \text{mex}(\lbrace i \oplus j \mid i \in 1, n, \ j \in 1, n \rbrace) mex({i⊕j∣i∈1,n, j∈1,n})。

其中 mex \text{mex} mex 表示集合中未出现的最小非负整数。

数据范围

  • 1 ≤ n ≤ 1 0 18 . 1 \leq n \leq 10^{18}. 1≤n≤1018.

Solution

要能异或出 1 1 1,最小的两个数都必须是 2 ⊕ 3 2 \oplus 3 2⊕3,所以 n ≤ 2 n \leq 2 n≤2 的 mex \text{mex} mex 都是 1 1 1.

下面讨论 n > 2 n > 2 n>2 的情况, 1 1 1 肯定能被表示出来。

取 m m m 满足 2 m − 1 < n ≤ 2 m 2^{m - 1} < n \leq 2^m 2m−1<n≤2m,用归纳法。初始时只有 [ 1 , 2 ) [1, 2) [1,2) 能被表示。

取 k = 1 k = 1 k=1,

  • 现在 [ 1 , 2 ) [1, 2) [1,2) 以内的数都可以被表示,
  • 将这些数都 ⊕ 2 \oplus 2 ⊕2, 会得到 [ 2 + 1 , 2 2 ) [2 + 1, 2^2) [2+1,22),
  • 再通过 ( 2 + 1 ) ⊕ 1 (2 + 1) \oplus 1 (2+1)⊕1 得到 2 2 2,这样就扩展到 [ 1 , 2 2 ) [1, 2^2) [1,22).
suppose \\text{suppose} suppose: 下面的 i \< m i \< m i\

设 k = i − 1 k = i - 1 k=i−1 时能扩展到 [ 1 , 2 i ) [1, 2^i) [1,2i)。

那么 k = i k = i k=i 时,

  • 现在 [ 1 , 2 i ) [1, 2^i) [1,2i) 以内的数都可以被表示,
  • 将这些数都 ⊕ 2 i \oplus 2^i ⊕2i, 会得到 [ 2 i + 1 , 2 i + 1 ) [2^i + 1, 2^{i + 1}) [2i+1,2i+1),
  • 再通过 ( 2 i + 1 ) ⊕ 1 (2^i + 1) \oplus 1 (2i+1)⊕1 得到 2 i 2^i 2i,这样就扩展到 [ 1 , 2 i + 1 ) [1, 2^{i + 1}) [1,2i+1).

所以我们得到, k = m − 1 k = m - 1 k=m−1 时,可以扩展到 [ 1 , 2 m ) [1, 2^m) [1,2m)。

如果再取 k = m k = m k=m,分类讨论:

  • n < 2 m n < 2^m n<2m, 我们无法进行第二步: 【将这些数都 ⊕ 2 m \oplus 2^m ⊕2m】,
  • n = 2 m n = 2^m n=2m,我们可以进行第二步,得到 [ 2 m + 1 , 2 m + 1 ) [2^m + 1, 2^{m + 1}) [2m+1,2m+1),
    • 但是无法进行第三步: 【再通过 ( 2 m + 1 ) ⊕ 1 (2^m + 1) \oplus 1 (2m+1)⊕1 得到 2 m 2^m 2m】.

综上,取 m m m 满足 2 m − 1 < n ≤ 2 m 2^{m - 1} < n \leq 2^m 2m−1<n≤2m, mex = 2 m \text{mex} = 2^m mex=2m。

时间复杂度 O ( log ⁡ n ) O(\log n) O(logn)

Code

cpp 复制代码
#include <bits/stdc++.h>

using i64 = long long;

void solve() {
    i64 n;
    std::cin >> n;
    
    if (n <= 2) {
        std::cout << 1 << "\n";
    } else {
        int k = std::__lg(2 * n - 1);
        std::cout << (1LL << k) << "\n";   
    }
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int T;
    std::cin >> T;
    
    while (T--) {
        solve();
    }
    
    return 0;
}
相关推荐
MicroTech20254 小时前
量子隐形传态路线的瓶颈与突破,微算法科技(MLGO)以技术创新助力量子通信长距离组网
科技·算法·量子计算
洛水水4 小时前
【力扣100题】89.下一个排列
数据结构·算法·leetcode
洛水水5 小时前
【力扣100题】90.寻找重复数
算法·leetcode·职场和发展
鱼子星_5 小时前
【数据结构】排序的拓展——快速排序的生态多样性与归并排序沾染文件操作
c语言·数据结构·算法
alphaTao5 小时前
LeetCode 每日一题 2026/6/8-2026/6/14
算法·leetcode
KaMeidebaby5 小时前
卡梅德生物技术快报|噬菌体展示文库构建全流程解析 | 大豆球蛋白纳米抗体筛选实践
人工智能·python·tcp/ip·算法·机器学习
CC数学建模5 小时前
2026年第十六届APMCM 亚太地区大学生数学建模竞赛(中文赛项)赛题B题:高性能芯片热管理系统的优化问题完整思路、代码、模型、文章,全网首发高质量分享!
python·算法·数学建模
爱睡懒觉的焦糖玛奇朵5 小时前
【视觉检测之人员奔跑检测算法开发思路】
人工智能·python·深度学习·算法·yolo·视觉检测
05候补工程师5 小时前
【408考研复习】数据结构核心笔记:字符串模式匹配与内部排序算法全解析
数据结构·经验分享·笔记·考研·算法·排序算法
kyle~5 小时前
机器人日志系统
c++·单片机·嵌入式硬件·机器人·ros2