Luogu P7627 题解
这题其实不难
但如果用暴力,肯定过不了
所以我们得想另一种办法
我们发现,只有 \(1\) 异或 \(0\) 的值为 \(1\)
例如:
\(1\) , \(0\) , \(1\) 两两异或的和为 2
其实就是每个 \(0\) 与每一个 \(1\) 异或时,\(sum\) 要加 \(1\)
所以,我们只要把每一位的 \(0\) 和 \(1\) 的数量都统计出来,再进行运算,就可以快速得出 \(sum\)
\(AC\hspace{0.2cm}Code\)
#include<bits/stdc++.h>//万能头文件
#define int long long//记得开 long long
using namespace std;
int n,cnt[100],sum;
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
int a,j=1;
scanf("%lld",&a);
while(a){
cnt[j]+=a%2;//统计每一位 1 的个数
j++;
a/=2;
}
}
for(int i=1;i<=30;i++){
sum+=cnt[i]*(n-cnt[i])*(1<<(i-1));//算出每一位的异或值
}
printf("%lld",sum);
return 0;//完美收尾
}
作者:I_like_magic
出处:https://www.cnblogs.com/I-like-magic/
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!
版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。
出处:https://www.cnblogs.com/I-like-magic/
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!
版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】