You are given n integers a1, a2, ..., an. Find the number of pairs of indexes i, j (i < j) that ai + aj is a power of 2 (i. e. some integer x exists so that ai + aj = 2x).
题目意思让你找有多少个2个组合的数字能是2的幂方
直接暴力搜
#include "bits/stdc++.h"
#define ll long long
using namespace std;
int n,x;
int main()
{
cin >> n;
vector<int>v(n);
map<int,ll>m;
for(int i=0;i<n;i++){
cin >> v[i];
m[v[i]]++;
}
ll ans = 0;
for(int i=0;i<n-1;i++){
m[v[i]]--;
// 小幅度优化
/*
ll p = log2(v[i])+1;
for(int j=p;j<=35;j++){
ll k = pow(2,j)-v[i];
ans+= m[k];
}
*/
for(int j=0;j<=35;j++){
ll k = pow(2,j)-v[i];
ans+= m[k];
}
}
cout << ans << endl;
return 0;
}