异或类经典题型
Fireworks_Rise · · 个人记录
前言
此乃小 Oler 记录学习的文章,从今日后,还会进行详细的修订。
思想 No.1 (结合二进制运算)
浅析 [性质 1]
由于位运算是位独立的,我们可以把它按二进制拆分为
由于异或具有自反性,类比前缀和,记
例题
①. P9236 [蓝桥杯 2023 省 A] 异或和之和
②. P3917 异或序列
Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,a[N],s[N];
signed main() {
scanf("%lld",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
int ans=0;
for(int i=0;i<=20;i++) {
for(int j=1;j<=n;j++) {
if((a[j]>>i)&1) s[j]=s[j-1]^1;
else s[j]=s[j-1];
}
int l=0,r=0;
for(int j=0;j<=n;j++) {
if(s[j]==0) l++;
else r++;
}
ans+=(1ll<<i)*l*r;
}
printf("%lld\n",ans);
return 0;
}
有待开发....