CodeForces Powers of Two STL
Powers of Two
time limit per test
3 secondsmemory limit per test
256 megabytesinput
standard inputoutput
standard outputYou 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 xexists so that ai + aj = 2x).
Input
The first line contains the single positive integer n (1 ≤ n ≤ 105) — the number of integers.
The second line contains n positive integers a1, a2, ..., an (1 ≤ ai ≤ 109).
Output
Print the number of pairs of indexes i, j (i < j) that ai + aj is a power of 2.
Examples
input
4
7 3 2 1
output
2
input
3
1 1 1
output
3
Note
In the first example the following pairs of indexes include in answer: (1, 4) and (2, 4).
In the second example all pairs of indexes (i, j) (where i < j) include in answer.
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <iomanip>
#include <math.h>
#include <map>
using namespace std;
#define FIN freopen("input.txt","r",stdin);
#define INF 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
typedef long long LL;
int a[100005];
int main()
{
//FIN
int n;
LL ans;
map<int,int> m;
while(~scanf("%d",&n))
{
ans=0;
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
m.clear();
for(int i=1; i<=n; i++)
{
for(LL j=1; j<=2e9; j+=j)
{
ans+=m[j-a[i]];
}
m[a[i]]++;
}
cout<<ans<<endl;
return 0;
}
}

浙公网安备 33010602011771号