【CodeForces】702B - Powers of Two(二分)
2016-08-06 09:04
615 查看
点击打开题目
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
output
input
output
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.
以后见到这种数据又大又要找有多少对的要想起来二分,2的31次方大概就能包括到两个最大的数之和,所以从第一个数开始,从2的1~31次方依次枚举,二分找有多少满足的就行了,这个找有多少个数用upper_bound - lower_bound就行了。
另外:注意数的精度。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define CLR(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define MAX 100000
int main()
{
int n;
__int64 num[MAX+11];
while (~scanf ("%d",&n))
{
for (int i = 1 ; i <= n ; i++)
scanf ("%I64d",&num[i]);
sort(num+1 , num+1+n);
__int64 ans = 0;
for (int i = 1 ; i <= n ; i++)
{
for (int j = 1 ; j <= 31 ; j++)
{
__int64 t = ((__int64)1<<j) - num[i];
ans += upper_bound(num+1+i , num+1+n , t) - lower_bound(num+1+i , num+1+n , t);
}
}
printf ("%I64d\n",ans);
}
return 0;
}
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
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.
以后见到这种数据又大又要找有多少对的要想起来二分,2的31次方大概就能包括到两个最大的数之和,所以从第一个数开始,从2的1~31次方依次枚举,二分找有多少满足的就行了,这个找有多少个数用upper_bound - lower_bound就行了。
另外:注意数的精度。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define CLR(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define MAX 100000
int main()
{
int n;
__int64 num[MAX+11];
while (~scanf ("%d",&n))
{
for (int i = 1 ; i <= n ; i++)
scanf ("%I64d",&num[i]);
sort(num+1 , num+1+n);
__int64 ans = 0;
for (int i = 1 ; i <= n ; i++)
{
for (int j = 1 ; j <= 31 ; j++)
{
__int64 t = ((__int64)1<<j) - num[i];
ans += upper_bound(num+1+i , num+1+n , t) - lower_bound(num+1+i , num+1+n , t);
}
}
printf ("%I64d\n",ans);
}
return 0;
}
相关文章推荐
- 【Codeforces】-702B-Powers of Two(二分)
- codeforces-702B-Powers of Two
- Codeforces 702 B. Powers of Two(二分)
- Codeforces 702B - Powers of Two
- CodeForces 702B: Powers of Two(遍历、穷举)
- coderforces 702B - Powers of Two(二分)
- codeforces 305 C. Ivan and Powers of Two
- CodeForces 305C--Ivan and Powers of Two (STL:set)
- codeforces 305 C. Ivan and Powers of Two
- CodeForces 305C Ivan and Powers of Two【set】
- codeforces-Powers of Two(map的应用)
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
- Ivan and Powers of Two
- Educational Codeforces Round 15 B. Powers of Two
- CF_305_C. Ivan and Powers of Two
- 二分查找——Median of two Sorted Arrays
- Educational Codeforces Round 15 B Powers of Two
- leetcode 4 Median of Two Sorted Arrays(二分+思路)
- Ivan and Powers of Two
- URAL 1721 Two Sides of the Same Coin(二分匹配)