coderforces 702B - Powers of Two(二分)

    xiaoxiao2025-08-08  4

    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.

    思路:由于Ai + Aj = 2 ^ x , 则有 2 ^ x - Ai = Aj ,即二分查找即可。

    #include <cstdio> #include <iostream> #include <algorithm> using namespace std; int main() { int n; __int64 a[100010]; while(~scanf("%d",&n)) { for(int i = 1 ; i <= n ; i++) scanf("%I64d",&a[i]); sort(a+1,a+1+n); __int64 ans = 0; for(int i = 1 ; i <= n ; i++) { for(int j = 1 ; j <= 31 ; j++) { __int64 t = ((__int64) 1 << j) - a[i]; ans += upper_bound(a+1+i,a+n+1,t) - lower_bound(a+1+i,a+1+n,t); } } printf("%I64d\n",ans); } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1301521.html
    最新回复(0)