組合數+2的冪次方

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

題目大意:給你n個數,問你有多少種可能使兩個數加起來是2的冪次方

由於n的範圍是1e5,暴力組合判斷肯定會T,於是我們用map容器,記錄的數出現的次數。

//https://blog.csdn.net/hesorchen
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mem(a, b) memset(a, b, sizeof(a))
#define lowbit(a) (a & (-a))
#define mod 1000000007
#define endl "\n"


map<ll, ll> mp;
int main()
{
    int n;
    cin >> n;
    ll ans = 0;
    while (n--)
    {
        ll a;
        cin >> a;
        for (int i = 0; i < 33; i++)
            ans += mp[(1 << i) - a];
        mp[a]++;
    }
    cout << ans << endl;
    return 0;
}
發佈了55 篇原創文章 · 獲贊 54 · 訪問量 7396
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章