http://codeforces.com/problemset/problem/702/B
给n个数,求有几对数能构成2的n次方(n<32)。
灵活使用Map。
#include <bits/stdc++.h>
using namespace std;
int n;
int x;
long long ans;
map <int,int> m;
int main(){
cin >> n;
for (int i=0;i<n;i++){
cin >> x;
for (int i=0;i<31;i++){
ans+=m[(1<<i)-x];
}
m[x]++;
}
cout << ans << endl;
}