[GESP202312 五级] 烹饪问题

GESP编程共123题,本题是整站第1387题,已经有人完成了本题,加油!

题目描述

有 N 种食材,编号从 0 至 N−1,其中第 i 种食材的美味度为 ai​。

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

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

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

输入格式

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

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

输出格式

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

输入输出样例

输入 #1

3
1 2 3

输出 #1

2

输入 #2

5
5 6 2 10 13

输出 #2

8

说明/提示

样例解释 1

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

样例解释 2

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

数据范围

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

对于所有测试点,保证 N≤10^6,0≤ai​≤2,147,483,647。

别灰心,再试一次!

真题解析

【题目大意】选出2个数字,求出这2个数字与操作的最大结果是多少。
【考纲知识点】位运算知识,循环知识,排序知识
【解题思路】需要选取2个数字,可以用双重循环枚举这2个数字,取最大值,最终得到答案。对于前40%的测试点是可以的。当数据量大的时候,就超时了。我们知道两个数字对应的二进制,位数越高是1,越有可能是答案。所以从最高位统计,是否至少有2个数字最高位是1,保存最高位结果,并且把最高位非1的数字删去;再查询次高位是否至少有2个以上的数字二进制位都是1,以此类推,求出哪2个数字与 结果最大。利用快速排序的方法每次将剩余数字中当前考虑的位为1的数字放在前面,时间复杂度是O(N*log(a_i值的最大值))
【参考程序】

本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。