[NOI2025] 集合 题解

news/2025/10/4 10:24:18/文章来源:https://www.cnblogs.com/FloatingLife/p/19124738

去不了 NOI 的菜鸡终于把集合看懂了,写个博客加深一下印象。
[NOI2025] 集合

要求:

\[ans=\sum_P \sum_Q [f(p)=f(Q)][P\cap Q = \emptyset] \prod_{i\in P\cup Q} a_i \]

先处理这题比较特殊的 \([f(p)=f(Q)]\),考虑枚举 \(f(P)=f(Q)=S\)\(f(P),f(Q)\) 恰好等于 \(S\) 不好做,容斥一下变成包含:

\[\begin{aligned} ans &= \sum_S \sum_{S\subseteq T_P} \sum_{S\subseteq T_Q} \sum_{T_P \subseteq f(P)} \sum_{T_Q \subseteq f(Q)} (-1)^{|T_P|-|S|} (-1)^{|T_Q|-|S|} [P\cap Q = \emptyset] \prod_{i\in P\cup Q} a_i\\&= \sum_S \sum_{S\subseteq T_P} \sum_{S\subseteq T_Q} \sum_{T_P \subseteq f(P)} \sum_{T_Q \subseteq f(Q)} (-1)^{|T_P|+|T_Q|-2|S|} [P\cap Q = \emptyset] \prod_{i\in P\cup Q} a_i\\ \end{aligned} \]

发现容斥系数上的 \(-2|S|\) 没有用,可以去掉,所以也就没有必要枚举 \(S\),只需要枚举 \(T_P,T_Q\) 然后乘上合法的 \(S\) 数量即可,而合法的 \(S\) 满足 \(S\subseteq T_P,T_Q\) 也即 \(S\subseteq T_P\cap T_Q\),所以合法的 \(S\) 数量为 \(2^{|T_P\cap T_Q|}\)。为了美观,下面用 \(S,T\) 分别代替 \(T_P,T_Q\)

\[\begin{aligned} ans &= \sum_{S} \sum_{T} (-1)^{|S|+|T|} 2^{|S\cap T|} \sum_{S \subseteq f(P)} \sum_{T \subseteq f(Q)} [P\cap Q = \emptyset] \prod_{i\in P\cup Q} a_i\\ \end{aligned} \]

\(S \subseteq f(P)\) 相当于什么,其实就是说 \(P\) 中的数都要是 \(S\) 的超集,我们设 \(R_S\)\(S\) 的超集构成的集合,则 \(P\subseteq R_S\),于是我们就把跟 \(f\) 有关的东西去掉了。
然后处理 \([P\cap Q = \emptyset]\),我们直接去枚举 \(R=P\cup Q\),显然 \(R\subseteq R_S\cup R_T\)。那么对于 \(i\in R\),若 \(i\) 只属于 \(R_S\)\(R_T\) 中的一个,则 \(i\) 只能放到那一个,否则 \(i\) 放到哪一个都可以。

\[\begin{aligned} ans &= \sum_{S} \sum_{T} (-1)^{|S|+|T|} 2^{|S\cap T|} \sum_{R\subseteq R_S\cup R_T} \prod_{i\in R} (1+[i\in R_S\cap R_T])a_i\\&= \sum_{S} \sum_{T} (-1)^{|S|+|T|} 2^{|S\cap T|} (\prod_{i\in R_S\cup R_T \setminus R_S\cap R_T} (a_i+1)) (\prod_{i\in R_S\cap R_T} (2a_i+1))\\ \end{aligned} \]

\(f_S=\prod_{i\in R_S} (a_i+1),g_S=\prod_{i\in R_S} (2a_i+1)\),这两个可以高维后缀积 \(O(n2^n)\) 预处理。又发现 \(R_S\cap R_T=R_{S\cup T}\)

\[ans = \sum_{S} \sum_{T} (-1)^{|S|+|T|} 2^{|S\cap T|} f(S)f(T)\dfrac{g(S\cup T)}{f(S\cup T)^2} \]

然后这里有个问题是分母可能为 \(0\),有一个 trick 是直接把每个数用 \(x\times 0^k\) 的形式存储,表示这个数里面目前有 \(k\)\(0\),然后就可以做除法了。
发现这个式子里同时有 \(S\cap T\)\(S\cup T\),但是 \(S\cap T\) 我们只关心他的大小,所以我们可以用 \(|S\cap T|=|S|+|T|-|S\cup T|\) 来换掉:

\[\begin{aligned} ans &= \sum_{S} \sum_{T} (-1)^{|S|+|T|} 2^{|S|+|T|-|S\cup T|} f(S)f(T)\dfrac{g(S\cup T)}{f(S\cup T)^2} \\ &= \sum_{S} \sum_{T} (-2)^{|S|}f(S) \times (-2)^{|T|}f(T) \times \dfrac{g(S\cup T)}{2^{|S\cup T|}f(S\cup T)^2} \end{aligned} \]

\(F(S)=(-2)^{|S|}f(S),h=F\times F\),这里 \(\times\) 是或卷积,则:

\[ans=\sum_S \dfrac{h(S)g(S)}{2^{|S|}f(S)^2} \]

最后一个问题是,这里 \(F\) 是用 \(x\times 0^k\) 的形式存储,但是做 FMT 的时候涉及到加减法,当 \(k_1\ne k_2\) 时,两个数 \(x1\times 0^{k_1},x2\times 0^{k_2}\) 无法简单的加减法。
不过注意到我们在除以 \(f(S)^2\) 之后不可能除出来一个 \(0\) 的负次幂,所以对于分子中 \(0\) 的非最低次项他除完分母之后 \(0\) 的幂一定 \(>0\),所以贡献一定为 \(0\),因此在做加减法的时候直接舍弃次幂大的那个即可。

code

#include<bits/stdc++.h>
#define Debug puts("-------------------------")
using namespace std;
const int N=(1<<20)+5,mod=998244353,inv2=(mod+1)/2;inline int read(){int w=1,s=0;char c=getchar();for(;c<'0'||c>'9';w*=(c=='-')?-1:1,c=getchar());for(;c>='0'&&c<='9';s=s*10+c-'0',c=getchar());return w*s;
}
int c,T,n,a[N],p[30],p2[30];
int qp(int a,int b){int ans=1;while(b){if(b&1) ans=1ll*ans*a%mod;b>>=1,a=1ll*a*a%mod;}return ans;
}
struct Val{int x,k;Val() : x(0),k(0) {}Val(int _x,int _k) : x(_x),k(_k) {}
}f[N],g[N],h[N],F[N]; 
Val operator * (const Val &u,const Val &v){return Val(1ll*u.x*v.x%mod,u.k+v.k);}
Val operator + (const Val &u,const Val &v){if(u.k==v.k) return Val((u.x+v.x)%mod,u.k);return u.k<v.k?u:v;
}
Val operator - (const Val &u,const Val &v){if(u.k==v.k) return Val((u.x-v.x+mod)%mod,u.k);return u.k<v.k?u:v;
}
void OR(Val *a,int t){for(int i=1;i<(1<<n);i<<=1){for(int len=i<<1,j=0;j<(1<<n);j+=len){for(int k=0;k<i;k++){if(t==1) a[j+k+i]=a[j+k+i]+a[j+k];else a[j+k+i]=a[j+k+i]-a[j+k];}}}
}	
signed main(){p[0]=p2[0]=1;for(int i=1;i<=25;i++) p[i]=(mod-2*p[i-1]%mod)%mod,p2[i]=1ll*p2[i-1]*inv2%mod;c=read(),T=read();while(T--){n=read();for(int i=0;i<(1<<n);i++){a[i]=read();f[i]=(a[i]+1==mod)?Val(1,1):Val(a[i]+1,0);g[i]=(2*a[i]+1==mod)?Val(1,1):Val((2*a[i]+1)%mod,0);}for(int i=0;i<n;i++){for(int s=0;s<(1<<n);s++){if(!(s>>i&1)) f[s]=f[s]*f[s|(1<<i)],g[s]=g[s]*g[s|(1<<i)];}}for(int s=0;s<(1<<n);s++) F[s]=Val(1ll*f[s].x*p[__builtin_popcount(s)]%mod,f[s].k);OR(F,1);for(int s=0;s<(1<<n);s++) h[s]=F[s]*F[s];OR(h,-1);int ans=0;for(int s=0;s<(1<<n);s++){Val t1=h[s]*g[s],t2=f[s]*f[s];if(t1.k==t2.k) (ans+=1ll*t1.x*qp(t2.x,mod-2)%mod*p2[__builtin_popcount(s)]%mod)%=mod;}printf("%d\n",ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站模板下载百度云链接怎么做的crm管理系统定制

本文由云社区发表本文作者&#xff1a;许中清&#xff0c;腾讯云自研数据库CynosDB的分布式存储CynosStore负责人。从事数据库内核开发、数据库产品架构和规划。曾就职于华为&#xff0c;2015年加入腾讯&#xff0c;参与过TBase(PGXZ)、CynosDB等数据库产品研发。专注于关系数据…

做文案策划需要用到的网站化妆品网站设计

常量是一个特殊的符号&#xff0c;它有一个从不变化的值。定义常量符号时&#xff0c;它的值必须能在编译时确定。确定之后&#xff0c;编译器将常量的值保存到程序集的元数据中。这意味着只能为编译器认定的基元类型定义常量。在C#中一下类型都是基元类型&#xff0c;可用于定…

详细介绍:Linux 自定义shell命令解释器

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

bi数据报表发送周期,周报和月报获取日期时间

bi数据报表发送周期,周报和月报获取日期时间bi数据报表发送周期,周报和月报获取日期时间 1.今天是周四,获取上周四-本周三的日期,格式为yyyyMMddHHmmssString startTime = "";String endTime = "&q…

自己站网站可以做h5游戏的网站

一.压榨历史 1.单进程人工切换。纸带机。只能解决简单的数学问题。 2.单道批处理。多进程批处理。多个任务批量执行。解决手动操作时需要人工切换作业导致的系统利用率低的问题 3.多进程并行处理。把程序写在不同的内存位置来回切换。当一个作业在等待I/O处理时&#xff0c;…

美工网站设计门户网站创新的方式有

利用两个管道进行进程间双向通信在第一篇练习已经大致作出说明&#xff0c;下面将进行一个更为综合的练习 首先看题目&#xff1a; 设有二元函数f(x,y) f(x) f(y) 其中&#xff1a; f(x) f(x-1) * x (x >1) f(x)1 (x1) f(y) f(y-1) f(y-2) (y> 2) f(y)1 (y1,2) 请编…

郑州机械网站建设导航滑动整屏网站

一、为什么要进行数据归一化 定义&#xff1a;把所有数据的特征都归到 [0,1] 之间 或 均值0方差1 的过程。原则&#xff1a;样本的所有特征&#xff0c;在特征空间中&#xff0c;对样本的距离产生的影响是同级的&#xff1b;问题&#xff1a;特征数字化后&#xff0c;由于取值…

电脑科技网站模板外链工具在线

1.Java语言的特点&#xff1f; 1.一面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;2.平台无关性&#xff08; Java 虚拟机实现平台无关性&#xff09;&#xff1b;(类是一种定义对象的蓝图或模板)3.支持多线程&#xff08; C 语言没有内置…

技术Leader的1-3-5沟通法则:向上管理的艺术 - 指南

技术Leader的1-3-5沟通法则:向上管理的艺术 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

【Phar反序列化】 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

永年网站建设创建全国文明城市总结

1 rtsp 接入 我们使用unity UE 等三维渲染引擎中使用c编写插件来接入rtsp 视频。同时做融合的时候&#xff0c;和背景的三维颜色要一致&#xff0c;这就要使用视频融合修正技术。包括亮度&#xff0c;对比度&#xff0c;饱和度的修正。在单纯颜色上的修正可以简单使用rgb->…

楚雄自助建站系统地税城市维护建设税网站是什么

Azure 提供了几种托管网站的方式&#xff1a;Azure 应用服务、虚拟机、Service Fabric 和云服务。 本文可帮助你了解这几种方式&#xff0c;并针对 Web 应用程序做出正确的选择。 Azure 应用服务是大多数 Web 应用的最佳选择。 部署和管理都已集成到平台&#xff0c;站点可以快…

济南php网站开发使用element做的网站

Mars 是一个并行和分布式 Python 框架&#xff0c;能轻松把单机大家耳熟能详的的 numpy、pandas、scikit-learn 等库&#xff0c;以及 Python 函数利用多核或者多机加速。这其中&#xff0c;并行和分布式 Python 函数主要利用 Mars Remote API。 启动 Mars 分布式环境可以参考…

柳市网站优化昌江县住房和城乡建设局网站

网上排出此错误方法的很多&#xff0c;但是 都不简洁&#xff0c;找不到根本原因 主要排查两点&#xff1a; 1.代码中jdbc链接的编码规则 urljdbc:mysql://localhost:3306/title?useUnicodetrue&amp;characterEncodingutf8 将characterEncoding设置为utf8 2.设置mysq…

网站备案中是什么意思新能源汽车车型及报价

给出两个正整数&#xff0c;判断他们的大小。 输入格式&#xff1a; 两个正整数。 输出格式&#xff1a; 若前者大&#xff0c;输出>&#xff1b; 若后者大&#xff0c;输出<&#xff1b; 若一样大&#xff0c;输出。 输入&#xff1a; 1412894619244619891 23762842…

完整教程:AI时代如何高效学习Python:从零基础到项目实战de封神之路(2025升级版)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

cannot resolve method add in T 及 T 泛型类型生成Excel文件,区别是数据Model不同

cannot resolve method add in T 及 T 泛型类型生成Excel文件,区别是数据Model不同cannot resolve method add in T 及 T 泛型类型生成Excel文件,区别是数据Model不同 1.通过继承父类来解决public void largeDataCre…

网站开发专员招聘企业网站需要多大带宽

1.继承派生的区别 继承&#xff1a;子继父业&#xff0c;就是子类完全继承父类的全部内容 派生&#xff1a;子类在父类的基础上发展 2.继承方式 1.public继承为原样继承 2.protected继承会把public继承改为protect继承 3.private继承会把public&#xff0c;protected继承改为pr…

备案中网站名称网站建设创客

*本文系SDNLAB编译自瞻博网络技术专家兼高级工程总监Sharada Yeluri领英 在路由器和交换机中&#xff0c;缓冲区至关重要&#xff0c;可以防止网络拥塞期间的数据丢失。缓冲区到底要多大&#xff1f;这个问题在学术界和工业界一直备受争议。本文探讨了高端路由器中数据包缓冲的…

MySQL慢查询深度解析:从诊断到优化的完整指南 - 实践

MySQL慢查询深度解析:从诊断到优化的完整指南 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…