https://leetcode-cn.com/problems/count-good-meals/
思路:哈希计数,
c
n
t
i
cnt_i
cnti表示数字
i
i
i的出现次数,那么对于所有可能凑出来的美味程度
j
j
j(2的幂次),可以计算出:
a
n
s
=
a
n
s
+
c
n
t
[
j
−
e
l
e
]
ans=ans+cnt[j-ele]
ans=ans+cnt[j−ele]。
class Solution {
public:
int countPairs(vector<int>& deliciousness) {
int bs[22];
bs[0]=1;
unordered_map<int,int> cnt;
for(int i=1;i<=21;i++)
bs[i]=bs[i-1]<<1;
int ans=0,mod=1e9+7;
for(int ele:deliciousness)
{
for(int j=0;j<=21;j++)
{
if(bs[j]<ele)
continue;
if(cnt.count(bs[j]-ele))
ans=(ans+cnt[bs[j]-ele])%mod;
}
++cnt[ele];
}
return ans;
}
};