首页 > 其他分享 >[CL-22] 异或和之和

[CL-22] 异或和之和

时间:2024-09-27 21:34:15浏览次数:12  
标签:22 CL int cdots 异或 base ans

CL-22

二进制拆分。

对于枚举到的每一个二进制位 \(i\),注意到其对答案的贡献只有 \(0\) 和 \(2^{i}\) 两种情况

考虑什么时候贡献是 \(2^i\),可以发现,当选入奇数个该位为 \(1\) 的数之后,对答案的贡献是 \(2^{i}\)

因此变成求选出奇数个为 \(1\) 的数的方案数

设该位为 \(1\) 的数有 \(a\) 个,为 \(0\) 的数有 \(b\) 个,答案为 \(2^{b}\times\sum\limits^{a}_{i\in\{1,3,5,7\cdots\}}C^{i}_{a}\)

这样就可以做了,但是还有一个进一步的结论

\[\sum\limits^{a}_{i\in\{1,3,5,7\cdots\}}C^{i}_{a}=2^{a-1} \]

不会证明,但是它是对的

复杂度 \(n\log(2^{31})\)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int p=1e9+7;
int power(int a,int t){
	int base=a,ans=1;
	while(t){
		if(t&1){
			ans=ans*base%p;
		}
		base=base*base%p;
		t>>=1;
	}
	return ans;
}
int n;
int a[1000001];
int cnt0[33],cnt1[33];
signed main(){
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>a[i];
		for(int j=1;j<=32;++j){
			if(a[i]&1){
				cnt1[j]++;
			}
			else{
				cnt0[j]++;
			}
			a[i]>>=1;
		}
	}
	int ans=0;
	for(int i=1;i<=32;++i){
		if(!cnt1[i]) continue;		
		ans+=power(2,cnt1[i]-1)*power(2,cnt0[i])%p*power(2,i-1)%p;
		ans%=p;
	}
	cout<<ans<<endl;
}

标签:22,CL,int,cdots,异或,base,ans
From: https://www.cnblogs.com/HaneDaCafe/p/18436627

相关文章

  • 挖漏洞经验分享,挖漏洞赚取生活费,7天收益近2200,教你从零基础挖漏洞的正确姿势!
    经常有小伙伴问我。为什么自己总是挖不到漏洞呢?渗透到底是什么样的流程呢?所以全网最详细的渗透测试流程来了!!!全篇文章内容较长,请耐心观看!渗透测试渗透测试其实就是通过一些手段来找到网站,APP,网络服务,软件,服务器等网络设备和应用的漏洞,告诉管理员有哪些漏洞,怎么......
  • NSSCTF [HUBUCTF 2022 新生赛]simple_RE(变种base64编码)
    文件无壳拖入IDA中shift+F12查看可疑字符串发现两串字符串一看这两个等于号就猜测是base64编码进入主函数看看这段代码是一个简单的C语言程序,主要功能是接受用户输入的字符串作为“flag”,然后通过对输入的字符串进行一些处理和比较来验证是否输入了正确的“flag”。......
  • 中东电商:下一个蓝海,Google Cloud和Google Maps助力企业乘风破浪
    随着“一带一路”倡议的深入推进,中东地区已成为全球瞩目的新兴市场。庞大的年轻消费群体、丰富的石油资源以及不断完善的数字基础设施,为中国企业提供了前所未有的发展机遇。中东电商市场,无疑是下一个蓝海!中东电商市场:数字与机遇庞大市场规模:2023年中东地区的电商市场规模为1065......
  • SpringCloud入门
    SpringCloud原版笔记:狂神说笔记——SpringCloud快速入门23-subeiLY-博客园(cnblogs.com)一.前言 常见面试题什么是微服务?微服务之间是如何独立通讯的?SpringCloud和Dubbo有哪些区别?SpringBoot和SpringCloud,请你谈谈对他们的理解什么是服务熔断?什么是服......