题意:给你一个序列,对于序列中的元素 i 如果存在 j 满足i + j (i ≠ j)的值为2的幂则保留,否则将其删除;输出需要删除的个数。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 122222;
map<int,int>mp;
int a[maxn];
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++){
scanf("%d", &a[i]);
mp[a[i]]++;
}
int ans = 0;
for (int i = 0; i < n; i++)
{
bool flag = false;
for(int j = 0; j <= 30; j++){
if(mp.count((1 << j) - a[i])){
if(a[i] + a[i] == (1 << j)){
if(mp[a[i]] > 1){
flag = true;
break;
}
}
else{
flag = true;
break;
}
}
}
if(!flag){
ans++;
}
}
printf("%d\n", ans);
}