尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CF 2070F Friends and Pizza

CF 2070F Friends and Pizza
📅 发布时间:2026/6/19 17:51:00
仍然不会集合幂级数相关。

同学你的集合幂级数不过关。

这个题目的预期复杂度第一眼看着可能像是 \(\mathcal{O}(\operatorname{poly}(n)\ V)\),但是细想一下这样或许要跟背包有关,而背包不好表示出两人共选的限制。

不过考虑到是选择两人,那可以尝试一些结构的合并。

注意到 \(n\le 20\),尝试把每个人喜爱的编号看做二进制数 \(a_i\) 处理。

此时就很好表示两人 \(i, j\) 共选的集合了,就是 \(a_i\cap a_j\)。
再尝试表示出限制,记 \(P\) 是奇数块的编号集合,那么 \((i, j)\) 合法当且仅当 \(a_i\cap a_j \cap P = \varnothing\)。

并且此时就可以知道被吃掉的编号集合 \(a_i\cup a_j\),就可以知道剩下的编号,也就可以算出来和了。

综上,我们只需要考虑求出:

\[f_s = \sum\limits_{i = 1}^m\sum\limits_{j = i + 1}^m[a_i \cup a_j = s][a_i\cap a_j \cap P = \varnothing] \]

首先尝试把 \(\sum\sum\) 处的 \((i, j)\) 限制给去掉,这里相当于是枚举 \(i < j\) 的有序对,只需要先算出任意的 \((i, j)\) 对,去掉 \((i, i)\) 贡献,最后 \(/ 2\) 就可以得到真实值。
于是记 \(c_s = \sum\limits_{i = 1}^m [a_i = s]\),只需要考虑求出:

\[f'_s = \sum\limits_{a = 0}^{2^n}\sum\limits_{b = 0}^{2^n}[a \cup b = s] \]

这个形式长的就很像子集卷积,尝试对比一下子集卷积的形式:

\[f''_s = \sum\limits_{a = 0}^{2^n}\sum\limits_{b = 0}^{2^n} [a\cup b = s][a\cap b = \varnothing] \]

几乎是一样的,所以尝试套用子集卷积的方法:

\[\begin{align*} &a \cup b = s, a\cap b = \varnothing\\ \Rightarrow &a\cup b = s, |a| + |b| = |s| \end{align*} \]

尝试转换,可以得到:

\[\begin{align*} &a\cup b = s, a\cap b\cap P = \varnothing\\ \Rightarrow &a\cup b = s, (a\cap P) \cap (b\cap P) = \varnothing\\ \Rightarrow &a\cup b = s, |a\cap P| + |b\cap P| = |s\cap P| \end{align*} \]

于是类似的,设计 \(x^sy^i\),\(x\) 这一维乘法为 FWT-OR,\(y\) 这一维乘法为多项式卷积。

于是有:

\[F(x, y) = \sum\limits_{s = 0}^{2^n} c_s x^s y^{|s\cap P|}\\ f'_s = [x^s y^{|s\cap P|}]F(x, y)^2 \]

时间复杂度 \(\mathcal{O}(2^n n^2)\)。

#include <bits/stdc++.h>using ll = long long;constexpr int N = 20;
constexpr int M = 5e5 + 10;int n, m;
int lk[M], a[N], mask0;ll f[N + 1][1 << N], g[N + 1][1 << N];
ll cnt[1 << N], ans[M];int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= m; i++) {static char str[23];scanf("%s", str);int slen = strlen(str);for (int j = 0; j < slen; j++) {lk[i] |= 1 << str[j] - 'A';}}int sum = 0;for (int i = 0; i < n; i++) {scanf("%d", &a[i]);mask0 |= (a[i] & 1) << i;sum += a[i];}for (int i = 1; i <= m; i++) {int lk0 = lk[i] & mask0;f[__builtin_popcount(lk0)][lk[i]]++;if (lk0 == 0) {cnt[lk[i]]--;}}for (int i = 0; i <= n; i++) {for (int w = 0; w < n; w++) {for (int s = 0; s < (1 << n); s++) {if (s >> w & 1) {f[i][s] += f[i][s ^ (1 << w)];}}}}for (int s = 0; s < (1 << n); s++) {for (int i = 0; i <= n; i++) {for (int j = 0; i + j <= n; j++) {g[i + j][s] += f[i][s] * f[j][s];}}}for (int i = 0; i <= n; i++) {for (int w = 0; w < n; w++) {for (int s = 0; s < (1 << n); s++) {if (s >> w & 1) {g[i][s] -= g[i][s ^ (1 << w)];}}}}for (int s = 0; s < (1 << n); s++) {int s0 = s & mask0;cnt[s] += g[__builtin_popcount(s0)][s];cnt[s] /= 2;int suma = 0;for (int i = 0; i < n; i++) {if (~ s >> i & 1) {suma += a[i];}}ans[suma] += cnt[s];}for (int i = 0; i <= sum; i++) {printf("%lld%c", ans[i], " \n"[i == sum]);}return 0;
}

相关新闻

  • 上菱空调维修热线电话-24小时全国统一报修
  • 102302139 尚子骐 数据采集与融合作业2
  • 深入解析:Redis技术应用

最新新闻

  • 上海本地贵金属流通规则,2026 黄金回收各类附加损耗明细讲解 - 奢侈品回收测评
  • 3分钟掌握Reflex框架:用纯Python构建全栈Web应用
  • OpCore-Simplify终极指南:从8小时到15分钟,轻松完成macOS安装配置
  • 2026 安徽芜湖市高考落榜怎么办?安徽工贸职业技术学院公办单招复读班招生简章官网发布:线上报名入口+完整报考指南、招生计划、录取条件 - cc江江
  • MC68HC908TV24 TIM模块深度解析:从输入捕获到PWM生成的嵌入式定时器实战
  • 2026年新疆秋季摄影旅游向导选择和北疆路线参考指南 - 盛世西域旅行

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号