B3930 [GESP202312 五级] 烹饪问题

题目描述

有 NN 种食材,编号从 00 至 N−1N−1,其中第 ii 种食材的美味度为 aiai​。

不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味度分别为 xx 和 yy ,那么它们的契合度为 x and yx and y。

其中,anf 运算为按位与运算,需要先将两个运算数转换为二进制,然后在高位补足 ,再逐位进行与运算。例如,1212 与 66 的二进制表示分别为 11001100 和 01100110 ,将它们逐位进行与运算,得到 01000100 ,转换为十进制得到 4,因此 12and6=4。在 C++ 或 Python 中,可以直接使用 & 运算符表示与运算。

现在,请你找到契合度最高的两种食材,并输出它们的契合度。

输入格式

第一行一个整数 NN,表示食材的种数。

接下来一行 NN 个用空格隔开的整数,依次为 a1,⋯ ,aNa1​,⋯,aN​,表示各种食材的美味度。

输出格式

输出一行一个整数,表示最高的契合度。

输入输出样例

输入 #1

3
1 2 3

输出 #1

2

输入 #2

5
5 6 2 10 13

输出 #2

8

说明/提示

样例解释 1

可以编号为 1,21,2 的食材之间的契合度为 2 and 3=22 and 3=2,是所有食材两两之间最高的契合度。

样例解释 2

可以编号为 3,4的食材之间的契合度为 10 and 13=810 and 13=8,是所有食材两两之间最高的契合度。

数据范围

对于 40% 的测试点,保证 N≤1,000;

对于所有测试点,保证 N≤106,0≤ai≤2,147,483,647

code

#include<bits/stdc++.h>
using namespace std;
void read(int& a){
	int s = 0, w = 1;
	char ch = getchar();
	while (ch < '0' || ch>'9'){
		if (ch == '-')
			w = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9'){
		s = s * 10 + ch - '0';
		ch = getchar();
	}
	a = s * w;
}
bool cmp(int a,int b){
	return a>b;
}
int main(){
	int n;
	cin>>n;
	int a[n+1];
	int maxn=-100;
	for( int i=0;i<n;i++ )read(a[i]);
	sort(a,a+n,cmp);
	n=min(n,32);
	for( int i=0;i<n;i++ ){
		for( int j=0;j<n,i!=j;j++ ){
			int sum=a[j]&a[i];
//			if( i!=j ){
				maxn=max(maxn,sum);
//			}
		}
	}
	cout<<maxn;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值