codeforces-Powers of Two(map的应用)

来源:互联网 发布:c语言智能五子棋游戏 编辑:程序博客网 时间:2024/06/06 04:43
B. Powers of Two
time limit per test
3 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

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 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
47 3 2 1
output
2
input
31 1 1
output
3
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#include<map>#include<queue>#include<algorithm>using namespace std;int  main(){__int64 a[100005],sum=0;int b[33]; b[1]=2;for(int i=2;i<=30;i++)   b[i]=b[i-1]*2;map<int,int>p;int n,i,j;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%I64d",&a[i]);for(j=1;j<=30;j++){if(b[j]-a[i]<0 || p.count(b[j]-a[i])==0)continue;sum+=p[b[j]-a[i]];}p[a[i]]++;}printf("%I64d\n",sum);}


0 0
原创粉丝点击