CF449D: Jzzhu and Numbers

news/2025/2/13 2:08:12/

CF449D: Jzzhu and Numbers

原题链接:https://codeforces.com/problemset/problem/449/D

题解

cvc_vcv[ai=v][a_i=v][ai=v] 的个数, NNN 为二进制位数。
fSf_SfS 表示位与和在二进制下包含 SSS 的子集数。
由定义易得:
fS=2∑S⊆TcTf_S=2^{\sum\limits_{S\sube T} c_T}fS=2STcT

(不用减一,包含空集)
可由 SOSDPSOS\ DPSOS DP 枚举超集在 O(2NN)O(2^NN)O(2NN) 内求出。
由容斥原理可知答案:
位与和为0的子集数=位与和二进制下至少有0个1的子集数−位与和二进制下至少有1个1的子集数+位与和二进制下至少有2个1的子集数...\begin{aligned} 位与和为 0 的子集数=&位与和二进制下至少有 0 个 1 的子集数\\ &-位与和二进制下至少有 1 个 1 的子集数\\ &+位与和二进制下至少有 2 个 1 的子集数\\ &... \end{aligned}位与和为0的子集数=位与和二进制下至少有01的子集数位与和二进制下至少有11的子集数+位与和二进制下至少有21的子集数...

即:
ans=∑S=02N−1(−1)popcount(S)fSans=\sum_{S=0}^{2^N-1}(-1)^{popcount(S)}f_Sans=S=02N1(1)popcount(S)fS

参考代码

#include<bits/stdc++.h>
using namespace std;template<class T>inline void read(T&x){//快读char c,last=' ';while(!isdigit(c=getchar()))last=c;x=c^48;while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+(c^48);if(last=='-')x=-x;
}const int MAXN=1e6+7,P=1e9+7,m=20;
int n;
int a[MAXN];
int f[MAXN<<1];//注意要开到1<<20以上int qpow(int x,int p){//快速幂(没必要,打2的幂次表即可)int ret=1;for(;p;x=1ll*x*x%P,p>>=1)if(p&1)ret=1ll*ret*x%P;return ret;
}int pcnt(int x){//popcount求二进制下1个数int ret=0;while(x){ret+=x&1;x>>=1;}return ret;
}int main()
{read(n);for(int i=1;i<=n;++i){read(a[i]);++f[a[i]];}for(int t=0;t<m;++t){for(int i=0;i<1<<m;++i){if(!(i&1<<t))f[i]+=f[i^1<<t];//SOS DP计算超集}}for(int i=0;i<1<<m;++i)f[i]=qpow(2,f[i]);int ans=0;for(int i=0;i<1<<m;++i){if(pcnt(i)&1)ans=(ans-f[i])%P;//容斥else ans=(ans+f[i])%P;}cout<<(ans+P)%P<<'\n';return 0;
}

http://www.ppmy.cn/news/20306.html

相关文章

C++模板初阶小笔记

目录 一.泛型编程 二.函数模板 1.函数模板语法梳理&#xff1a; 2.函数模板的实例化&#xff1a; 3.函数模板的显式实例化&#xff1a; 4.函数模板使用时的注意事项 三.类模板 1.类模板的语法梳理 2.类模板中声明和定义分离的成员函数 一.泛型编程 泛型编程&#xff…

机器学习中的聚类算法

1. 概述根据所拥有的数据&#xff0c;可以使用三种不同的机器学习方法&#xff0c;包括监督学习、半监督学习和无监督学习。在监督学习中&#xff0c;根据已标记数据&#xff0c;因此可以确定输出是关于输入的正确值。通过半监督学习&#xff0c;用户将拥有一个大型数据集&…

报错:Only the original thread that created a view hierarchy can touch its views.

报错&#xff1a; Log:onCrashed()–>android.view.ViewRootImpl$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views. 报错原因&#xff1a; 一般在主线程操作UI&#xff0c;而此次有可能在子线程里操作了UI 解…

springboot 定时任务

Quartz和springTask区别 在Quartz中&#xff0c;默认所有的定时任务都是并发去执行&#xff0c;无需等到上次任务是否执行完毕。 springtask默认单线程去执行定时任务&#xff0c;需要等待上一次任务执行完毕才会去执行下一个任务&#xff08;要想让同一时间并发执行&#xff…

Springboot+vue中小企业合同管理系统

编写企业合同管理系统&#xff0c;让其能创建合同、修改合同、删除合同、合同变更标识、合同收款提醒、合同时间管理、合同废止标识、结束合同、合同统计、合同查询等几大功能。 (1) 创建合同 管理人员将签订后的合同的各项信息存入数据库中&#xff0c;使合同进入开始执行的…

WebAssembly编译之(3)-WASM编译实战之C/C++导出asm.js及wasm库

引言 上一节我们介绍了Ubuntu下的WASM的编译环境快速搭建。这一节我们继续WASM编译相关的介绍——如何导出C/C编写的函数库 WASM 相关文档&#xff1a; WebAssembly编译之(1)-asm.js及WebAssembly原理介绍 WebAssembly编译之(2)-Ubuntu搭建WASM编译环境 单个C文件(*.cpp)的导出…

智能驾驶 车牌检测和识别(二)《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》

智能驾驶 车牌检测和识别&#xff08;二&#xff09;《YOLOv5实现车牌检测&#xff08;含车牌检测数据集和训练代码&#xff09;》 目录 智能驾驶 车牌检测和识别&#xff08;二&#xff09;《YOLOv5实现车牌检测&#xff08;含车牌检测数据集和训练代码&#xff09;》 1. 前…

Swig/CPP2Java

简介 实际工程可能存在如下部分&#xff1a;业务接口需要编程高效的语言&#xff08;如Python、Java等&#xff09;&#xff0c;易于部署维护&#xff1b;而核心算法部分&#xff0c;某些场景需要高效计算&#xff0c;会使用性能高效的语言&#xff08;如C/C等&#xff09;。 …