运算为按位与运算需要先将两个运算数转换为二进制然后在高位补足 再逐位进行与运算。例如 与 的二进制表示分别为 和 将它们逐位进行与运算得到 转换为十进制得到 4因此 。在 C 或 Python 中可以直接使用运算符表示与运算。现在请你找到契合度最高的两种食材并输出它们的契合度。输入格式第一行一个整数 表示食材的种数。接下来一行 个用空格隔开的整数依次为 表示各种食材的美味度。输出格式输出一行一个整数表示最高的契合度。输入输出样例 #1输入 #13 1 2 3输出 #12输入输出样例 #2输入 #25 5 6 2 10 13输出 #28说明/提示样例解释 1可以编号为 的食材之间的契合度为 是所有食材两两之间最高的契合度。样例解释 2可以编号为 的食材之间的契合度为 是所有食材两两之间最高的契合度。数据范围对于 的测试点保证 对于所有测试点保证 。PART2解题思路2.1题目解释本题要求从个数中选出两个是他们按位与运算结果最大。2.2思路PART3算法步骤1.初始化答案为02.从高位开始枚举3.输出答案时间复杂度空间复杂度 PART4代码4.1AC记录网址4.2AC代码#includebits/stdc.h using namespace std; int main() { unsigned long long n;cinn;//输入食材数量 unsigned long long a[n1]; for(unsigned long long i1;in;i) cina[i];//读入 unsigned long long ans0;//存储最大契合度 for(long long i30;i0;i--) {//从高位到低位进行枚举 unsigned long long fans|(1ulli);//尝试将此为设为1 int cnt0; for(unsigned long long i21;i2n;i2) {//遍历全部食材 unsigned long long ja[i2]; unsigned long long f2jf; if(f2f) { cnt; if(cnt2) {//至少两个数满足条件则此位可以取1 ansf;//更新ans break;//因只需要寻找两个所以可以直接跳出循环 } } } } coutans;//输出答案 return 0; }4.3注意事项unsigned long long因为题目中的最大值可以达到 2,147,483,647这个数刚好是 2^31 - 1用 int32位有符号整数能存下。但在代码中进行了 1ull i 这样的位移操作当 i30 时结果是 2^30在 int 范围内没问题但 unsigned long long 可以确保因为 所以不可以直接两两枚举时间复杂度 可以注意到 所以二进制位最多只有位二进制中高位权值大于低位所以应该优先保证高位为1再考虑低位所以可以采用贪心策略从高位到低位进行枚举确定答案尝试将第一位设为1统计有多少个数满足条件如果满足的数不少于两个,更新位移时不溢出如果将来数据范围变大或用更高的位数unsigned long long 更安全