[关闭]
@lychee123 2017-10-02T21:44:48.000000Z 字数 582 阅读 1058

codeforce—702B:Powers of Two(map的简单应用)

STL


题面链接

题意

输入n(1 ≤ n ≤ 105),接下来n个数(1 ≤ ai ≤ 10^9),找出满足两个数的和为2的X次方的组数

样例

input
4
7 3 2 1
output
2
input
3
1 1 1
output
3

代码

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<map>
  4. #include<algorithm>
  5. using namespace std;
  6. int p[31];///预处理出2^i
  7. int a[100010];
  8. int main()
  9. {
  10. int n,i,j;
  11. p[0]=1;
  12. for(i=1;i<31;i++)
  13. p[i]=p[i-1]*2;
  14. while(~scanf("%d",&n))
  15. {
  16. map<int,int>mp;
  17. for(i=0;i<n;i++)
  18. {
  19. scanf("%d",&a[i]);
  20. mp[a[i]]++;
  21. }
  22. sort(a,a+n);
  23. long long ans=0;
  24. for(i=0;i<n;i++)
  25. {
  26. mp[a[i]]--;
  27. for(j=1;j<31;j++)
  28. {
  29. if(p[j]<a[i])
  30. continue;
  31. int num=p[j]-a[i];
  32. if(mp.find(num)==mp.end())
  33. continue;
  34. ans+=mp[num];
  35. }
  36. }
  37. printf("%lld\n",ans);
  38. }
  39. return 0;
  40. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注