测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A34572. 烹饪问题问题描述有 N 种食材,编号从 0 至 N-1,其中第 种食材的美味度为 ai。不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味度分别为x和y,那么它们的契合度为 x and y。其中, and运算为按位与运算,需要先将两个运算数转换为二进制,然后在高位补足0,再逐位进行与运算。例如,12与6的二进制表示分别为 1100 和 0110 ,将它们逐位进行与运算,得到 …

填空题 困难

题目描述

烹饪问题

问题描述

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

不同食材之间的组合可能产生奇妙的化学反应。具体来说,如果两种食材的美味度分别为x和y,那么它们的契合度为 x and y。其中, and运算为按位与运算,需要先将两个运算数转换为二进制,然后在高位补足0,再逐位进行与运算。例如,12与6的二进制表示分别为 1100 和 0110 ,将它们逐位进行与运算,得到 0100 ,转换为十进制得到4,因此12 and 6 =4。在 C++ 或 Python 中,可以直接使用 & 运算符表示与运算。

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

输入描述

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

接下来一行N个用空格隔开的整数,依次为  a0,...... an-1,表示各种食材的美味度。

输出描述

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

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

样例输入1

3
1 2 3

样例输出1

2

样例解释1

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

样例输入2

5
5 6 2 10 13

样例输出2

8

样例解释2

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

数据规模

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

对于所有测试点,保证 N ≤1000000 ,0 ≤ai≤2147483647。

参考答案

#include<cstdio> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> using namespace std; const int MAX_N = int(1e6) + 100; int a[MAX_N]; int sort(int l,int r,int k) { while(l <= r) { while ((l <= r) && (a[l] >> k & 1)) l++; while ((l <= r) && (!(a[r] >> k & 1))) r--; if (l <= r) swap(a[l++], a[r--]); } return r; } int main() { int n, j, ans=0; scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); for (int i = 31; i >= 0; i--) if ((j = sort(1, n, i)) >= 2) { ans = ans | 1 << i; n = j; } printf("%d\n", ans); return 0; }
上一题 下一题