牛牛爱位运算(与远算,相与的结果小于等于自身)

简介: 给定一个长度为n的序列a,你需要从中挑出任意多个(可以0个)数,使得他们&起来值最大。

题目链接:牛牛爱位运算

来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 262144K,其他语言524288K

64bit IO Format: %lld


题目描述:


牛牛正在学习位运算

他刚刚理解&的用法(and),准备趁热打铁,做做下面这题:

给定一个长度为n的序列a,你需要从中挑出任意多个(可以0个)数,使得他们&起来值最大。

看起来挺简单的,可是牛牛就是不会做。

比如说选出五个数1,3,5,7,9,他们&起来的值就是1&3&5&7&9=1


输入描述:

第一行,输入一个数T,表示数据组数。

第2~(T+1)行,每行读入一个数n,接下来读入n个数,第i个数表示ai。

输出描述:

对于每一组数据,你需要输出&的最大值。

示例1

输入

2

1 5

2 5 5

输出

5

5

说明

第一组数据,显然取5是最优的;

第二组数据,可以取两个5,5&5=5是最优的。

备注:

数据保证1<=T<=100000, 1<=ai,n<= 10^5,并且∑n≤10 ^6。


题意:就是让你选择任意多个(可以0个)数,让他们&起来值是最大的。

思路:直接找出n个数中最大的数即可。

原因:与(&)运算,一个数与其它任何数&,结果只会小于等于自己。

1&1=1

1&0=0

0&1=0

0&0=0

假如一个数的二进制 num1 = 0011010100100(前面补0)

另外一个数的二进制 num2 = 1001000100111

相与的结果是:        0001000100100

显然相与后的结果显然是变小了

除非这两个数相等,不然相与后一定变小。

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        int x;
        int ans=0;
        cin>>n;
        for(int i=0;i<n;i++)
        {
            cin>>x;
            ans=max(x,ans);
        }
        cout<<ans<<endl;
    }
    return 0;
}
相关文章
|
6月前
|
算法
容斥原理:能被整除的数
容斥原理:能被整除的数
|
2月前
|
C语言 Python
一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
41 3
|
5月前
数组\判断是否能被已知且小于x的素数整除
数组\判断是否能被已知且小于x的素数整除
26 0
|
6月前
26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.
26.一个正整数如果恰好等于它的因子之和,这个数称为“完数”,如6=1+2+3,求1000以内所有的完数.
64 0
|
6月前
|
算法 测试技术 C#
【位运算 拆位法 二分】3007. 价值和小于等于 K 的最大数字
【位运算 拆位法 二分】3007. 价值和小于等于 K 的最大数字
【剑指offer】-数值的整数次方-12/67
【剑指offer】-数值的整数次方-12/67
|
程序员
【牛客网】HJ99 自守数、OR86 返回小于 N 的质数个数
目录 HJ99 自守数 OR86 返回小于 N 的质数个数
83 0
小于等于K的最大子数组累加和
小于等于K的最大子数组累加和
|
算法
剑指Offer - 面试题16:数值的整数次方
剑指Offer - 面试题16:数值的整数次方
55 0
剑指offer 15. 数值的整数次方
剑指offer 15. 数值的整数次方
51 0