Day56力扣打卡
2023-12-14 11:11:59
打卡记录
数对统计(DP状态压缩)
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;
cin >> n;
map<int, int> mapp;
vector<int> a(n);
for (auto& x : a){
cin >> x;
mapp[x] ++;
}
vector<array<long long, 20>> dp(1 << 20);
int mask = (1 << 20) - 1;
for (int i = 0; i <= mask; ++i){
if (i & 1){
dp[i][0] = mapp[i] + mapp[i ^ 1];
}
else{
dp[i][0] = mapp[i];
}
for (int j = 1; j < 20; ++j){
if ((i >> j) & 1){
dp[i][j] = dp[i][j - 1] + dp[i ^ (1 << j)][j - 1];
}
else{
dp[i][j] = dp[i][j - 1];
}
}
}
long long ans = 0;
for (auto& x : a){
ans += dp[mask ^ x][19];
}
cout << ans << '\n';
}
int main(){
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int tc = 1;
// cin >> tc;
while (tc--){
solve();
}
return 0;
}
文章来源:https://blog.csdn.net/qq947467490/article/details/134916949
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!