题目意思是找出个满足ai⊕aj<min(ai,aj)的集合且这个集合的元素最多,输出这个最多的值就是结果
我们在纸上画画就会发现,只有二进制位数相同的情况下才会满足情况,那么只有求出每一位的对应的元素数量,然后输出最大的数量就是答案
#include <iostream> #include <cstdio> #include <cstring> #include <map> #include <algorithm> using namespace std; int main() { ios::sync_with_stdio(false);cin.tie(0); int T,n; int a[31]; cin>>T; while(T--) { fill(a,a+31,0); cin>>n; while(n--) { int x; cin>>x; int s=0; while(x){ s++; x>>=1; } a[s]++; } printf("%d ",*max_element(a,a+31)); } return 0; }
position=max_element(a,a+n)-a;
这样写的话就代表的是找到的最大元素的位置在哪里,position代表位置,还是蛮好理解的吧? 值得注意的一点是这个返回的是最大元素的位置,即指针指向第一个最大元素我们用以下方式表示找到的最大元素的值