[NOIP模拟]“与”-震惊!这代码风格欧元都没眼看了

发布于 2017-08-10  121 次阅读


Ps:“与”表示位运算 and,在 c++中表示为&。 【输入描述】
第一行为 n。接下来 n 行,一行一个整数表示 Ai。
【输出描述】
输出最大的 Ai“与”Aj 的结果。
【样例输入】
3
8
10
2
【样例输出】
8
【样例解释】
8 and 10 = 8
8 and 2 = 0
10 and 2 = 2
【数据范围】
20%的数据保证 n<=5000
100%的数据保证 n<=3*10^5,0<=Ai<=10^9


#include<cstdio>
#include<iostream>
#include<cstring>
const int maxn=3*1e5+5;
using namespace std;
int a[maxn],set[maxn];
int n;
int read(){
	int x=0; char ch=getchar();
	while (ch<'0' || ch>'9') ch=getchar();
	while (ch>='0' && ch<='9'){ x=x*10+ch-'0'; ch=getchar(); }
	return x;
}
int main()
{
	n=read();
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
	}
	for(int i=31;i>=0;i--)
	{
		int cnt=0;
		for(int j=1;j<=n;j++)
		{
			if(a[j]&(1<<i))
			{
				cnt++;
				set[cnt]=a[j];
			}
		}
		if(cnt>=2)
		{
			for(int j=1;j<=cnt;j++)
			{
				a[j]=set[j];
				n=cnt;
			}
		}
	}
	printf(
	return 0;
}