1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol video solution AI分析

解题思路

  • 核心思想:按位贪心筛选。从高位到低位(第 30 位到第 0 位,因为输入不超过 2×109<2312\times10^9<2^{31}2×109<231),尝试把当前位设为 1,检查是否至少有两个数能同时满足“这些位均为 1”。若能满足,就保留这些候选数并把该位并入答案;否则跳过该位。
  • 相关算法:逐位贪心 + 过滤候选集合。每次尝试的新掩码 mask = ans | (1<<b),统计满足 (x & mask) == mask 的元素个数(并在成功时把候选集合更新为这部分元素)。
  • 正确性说明:最大按位与的每一位独立决定。若某一位能与出 1,则必存在至少两个数同时具备这位为 1 且保留之前已确定的高位为 1;因此自高到低逐步确定为 1 的位不会影响已确定位的可行性。

复杂度分析

  • 时间复杂度:每一位最多遍历一遍候选集合,共 31 位,复杂度为 O(31n)≈O(n)O(31n)\approx O(n)O(31n)≈O(n)。

P4229.第1题-按位与

    1000ms Tried: 31 Accepted: 12 Difficulty: 3 所属公司 : 滴滴
    算法与标签>贪心算法

题目内容

C/C++中的按位与运算符“&”是双目运算符,其功能是参与运算的两数各对应的二进制位相与,只有对应的两个二进制位都为 111 时,结果位才为 111 。参与运算的两个数均以补码出现。例如 的计算如下(右下数字 222 表示 222 进制): 00000011200000011_{2}000000112​&000010102 00001010_{2}000010102​ 现在,给你 nnn 个数字,请你从中挑选 222 个数字,使他们的按位与运算结果在所有可能的挑选方式中是最大的。

输入描述

第一行包含一个正整数 n(2≤n≤300000)n(2≤n≤300000)n(2≤n≤300000),表示给定数字的数量。 接下来 nnn 行,每行包含 111 个整数 aaa(0≤a≤2000000000)$,表示一个给定的数字。

输出描述

输出仅一行,包含一个数字,表示题目所求的最大按位与的结果。

样例1

输入

3
8
10
2

输出

8

说明

888 & 10=810=810=8 ,888 & 2=02=02=0 ,101010 & 2=22=22=2,所以最大的一个结果是 888 。

开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 3, 42ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?