- 大餐计数
class Solution {
public:
static constexpr int MOD = 1e+9+7;
int countPairs(vector<int>& deliciousness) {
int maxVal = *max_element(deliciousness.begin(), deliciousness.end());
int maxSum = maxVal * 2;
int pairs = 0;
unordered_map<int, int> mp;
int n = deliciousness.size();
for (auto& val : deliciousness) {
for (int sum = 1; sum <= maxSum; sum <<= 1) {// 因为a+b=2的某次幂,我们要找是否存在,那存在的话2的某次幂要小于等于两倍最大值了。
int count = mp.count(sum - val) ? mp[sum - val] : 0;
pairs = (pairs + count) % MOD;
}
mp[val]++;
}
return pairs;
}
};