首页 > 试题广场 >

整数覆盖

[编程题]整数覆盖
  • 热度指数:108 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
我们称正整数A包含B,当且仅当表示按位或运算,即B中的所有为1的二进制位,在A中都为1.
现在给定n个正整数A_i,请你从中选出尽量少的整数,使得所有A_i都至少被一个你选出来的整数包含。
显然任何一个数总是包含其自身,即选择全部的数必定为一组合法答案(但不一定是最少的)。

输入描述:
第一行一个正整数n,接下来一行n个整数,第i个整数表示A_i


输出描述:

一行一个整数,表示至少需要选出几个数字。

示例1

输入

5
3 7 6 8 4

输出

2

说明

选择数字78,因为7=(111)_2,故3=(011)_2,4=(100)_2,6=(110)_2,7=(111)_2均被7包含(它们的每一个为1的二进制位,在7中对应的位置上都为1)。而8=(1000)_28包含。 
示例2

输入

8
4 12 16 3 11 7 9 8

输出

4
头像 Silencer76
发表于 2025-08-31 16:39:27
题目链接 整数覆盖 题目描述 给定 个正整数。我们定义一个正整数 “包含” 另一个正整数 ,当且仅当 (A | B) == A,其中 | 是按位或运算。这个条件的含义是,在二进制表示下,所有 中为 的位,在 中也必须为 。 任务是从这 个数中选出尽可能少的数,组成一个集合,使得原来 个 展开全文