题目链接:https://codeforces.com/contest/1559/problem/A
题意:给定一个长度为n的数组,可执行任意次操作,把任意两个值变成他们&的值。求最终最大值的最小值是多少
思路:因为&操作代表相同才为1,不同则为0,那么只要这个数组中有任意一个数对应的二进制的某一位不1,那么就可以把整个数组的数对应的二进制的那一位变成0。
那么我们就可以任选一个数,然后把这个数和数组的其他所有数&起来,得到的结果则为这个数组的最大值的最小数。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
int x;
cin >> x;
for(int i = 0; i < n - 1; i++)
{
int y;
cin >> y;
x &= y;
}
cout << x << endl;
}
return 0;
}