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

[CL-22] 异或和之和

时间:2024-09-27 21:34:15浏览次数:10  
标签: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

相关文章

  • oracle 表空间
      SELECTa.tablespace_name"表空间名",total"表空间大小",free"表空间剩余大小",(total-free)"表占用空间大小",ROUND((total-free)/total*100,2)||'%'"已使用空间百分比"FROM(SELECT......
  • springcloud的gateway处理跨域问题
    gateway处理跨域问题,有两种方式,一种是配置文件,另外一种是代码配置文件spring:cloud:gateway:globalcors:cors-configurations:'[/**]':allowCredentials:trueallowedMethods:"*"allowedHeaders:......
  • springcloud的gateway使用全局过滤器
    全局过滤器是可以做一些统一的事情,比如认证鉴权、日志处理等@ComponentpublicclassLogFilterimplementsGlobalFilter,Ordered{Loggerlog=LoggerFactory.getLogger(this.getClass());@OverridepublicMono<Void>filter(ServerWebExchangeexchange,G......
  • 挖漏洞经验分享,挖漏洞赚取生活费,7天收益近2200,教你从零基础挖漏洞的正确姿势!
    经常有小伙伴问我。为什么自己总是挖不到漏洞呢?渗透到底是什么样的流程呢?所以全网最详细的渗透测试流程来了!!!全篇文章内容较长,请耐心观看!渗透测试渗透测试其实就是通过一些手段来找到网站,APP,网络服务,软件,服务器等网络设备和应用的漏洞,告诉管理员有哪些漏洞,怎么......
  • NSSCTF [HUBUCTF 2022 新生赛]simple_RE(变种base64编码)
    文件无壳拖入IDA中shift+F12查看可疑字符串发现两串字符串一看这两个等于号就猜测是base64编码进入主函数看看这段代码是一个简单的C语言程序,主要功能是接受用户输入的字符串作为“flag”,然后通过对输入的字符串进行一些处理和比较来验证是否输入了正确的“flag”。......
  • 中东电商:下一个蓝海,Google Cloud和Google Maps助力企业乘风破浪
    随着“一带一路”倡议的深入推进,中东地区已成为全球瞩目的新兴市场。庞大的年轻消费群体、丰富的石油资源以及不断完善的数字基础设施,为中国企业提供了前所未有的发展机遇。中东电商市场,无疑是下一个蓝海!中东电商市场:数字与机遇庞大市场规模:2023年中东地区的电商市场规模为1065......
  • P9676 [ICPC2022 Jinan R] Skills Solution
    P9676[ICPC2022JinanR]SkillsSolution拿到题目之后我们先考虑一个朴素dp:记\(f_{i,0/1/2,x,y}\)表示第\(i\)天,我们学习第1/2/3个技能,同时按照序号顺延下去的另两个技能分别有\(x,y\)天未学习的最大经验总和。这很明显是一个\(O(n^3)\)的dp,转移方程比较简单。我们......
  • oracle数据库内存分配方案
    查询当前参数设置SQL>showparametersgaSQL>showparameterpgaSQL>showparametermemory参数说明sga_target期望的sga大小sga_max_size最大sga大小pga_aggregate_target期望的pga大小pga_aggregate_limit最大pga大小设置原则sga_target不能大于sga_max_si......
  • SpringCloud入门
    SpringCloud原版笔记:狂神说笔记——SpringCloud快速入门23-subeiLY-博客园(cnblogs.com)一.前言 常见面试题什么是微服务?微服务之间是如何独立通讯的?SpringCloud和Dubbo有哪些区别?SpringBoot和SpringCloud,请你谈谈对他们的理解什么是服务熔断?什么是服......
  • Oracle:重复数据去重,只取最新的一条数据
    前言最近开发的时候遇到一个任务,需要对重复的数据进行筛选,只取插入时间最早的一条数据。这里介绍一下解决这类去重问题的几种思路先看样例数据解决思路一先groupby找到每个人最新的数据插入时间(insert_time),再通过insert_time作为条件表关联的条件筛选出每个人最新的数据1.......