CF 2070F Friends and Pizza

news/2025/11/10 21:13:40/文章来源:https://www.cnblogs.com/rizynvu/p/19208268

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

这个题目的预期复杂度第一眼看着可能像是 \(\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;
}

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

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

相关文章

上菱空调维修热线电话-24小时全国统一报修

上菱空调售后维修电话(24小时)全国统一售后服务 上菱空调售后电话:400-1819-193 为了更好地为您提供米恩集成灶维修服务,我们特为您整理了详细的报修流程及常见故障处理方法,希望能为您带来便捷的服务体验。如需帮…

openharmony部署ollama

需要的文件 通过网盘分享的文件:dot_ollama.tgz链接: https://pan.baidu.com/s/1MW-RgojiF7_R_xiswkMUBg?pwd=ug56 提取码: ug56 --来自百度网盘超级会员v7的分享通过网盘分享的文件:a.tgz链接: https://pan.baidu.…

【算法学习】AC自动机

AC自动机P5357 【模板】AC 自动机 字典树和 kmp 思想的结合。 先把模式串建成一个字符串。然后建立一个fail指针,将他连上失配时应退的尽可能近的节点。我是学习链接

华凌燃气灶全国各市服务点网点热线号码

华凌燃气灶售后维修-全国统一24小时400中心 华凌燃气灶售后电话:400-1819-193 为了更好地为您提供米恩集成灶维修服务,我们特为您整理了详细的报修流程及常见故障处理方法,希望能为您带来便捷的服务体验。如需帮助,…

20234320 2025-2026-1 《网络与系统攻防技术》实验四实验报告

20234320 2025-2026-1 《网络与系统攻防技术》实验四实验报告 1.实验内容 1.1 识别恶意代码的文件类型标识,进行脱壳与字符串提取。 1.2 使用IDA Pro静态或动态分析所给exe文件,找到输出成功信息的方法。 1.3 分析自…

102302139 尚子骐 数据采集与融合作业2

作业一1. 完整代码及运行结果点击查看代码 import requests from bs4 import BeautifulSoup import sqlite3 from datetime import datetime import logging# 配置日志 logging.basicConfig(level=logging.INFO, forma…

深入解析:Redis技术应用

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

6G网络通讯端到端结构

6G网络通讯端到端结构6G网络通讯端到端大结构6G网络通讯端到端结构,还未定型;个人理解供参考:以原有大通讯网络(如现有5G网等)为基础层,现有各类云为服务层,在最终用户和6G接入间增加了AI人工智能层。要达到的目…

万喜消毒柜售后维修中心服务热线电话(2025/已更新)

万喜消毒柜(维修)售后服务中心--报修欢迎您 万喜消毒柜售后电话:400-1819-193 为了更好地为您提供米恩集成灶维修服务,我们特为您整理了详细的报修流程及常见故障处理方法,希望能为您带来便捷的服务体验。如需帮助,…

20232426 2025-2026-1 《网络与系统攻防技术》实验四实验报告

一、实验目标(内容)恶意代码文件类型标识、脱壳与字符串提取 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息 分析一个自制恶意代码样本rada,并撰写报告 取证分析实践二…

HTTP 的方法和状态码 - 指南

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

华凌燃气灶维修全国各售后号码《今日汇总》

华凌燃气灶售后维修服务热线-号码2025已更新(受理/派单 华凌燃气灶售后电话:400-1819-193 为了更好地为您提供米恩集成灶维修服务,我们特为您整理了详细的报修流程及常见故障处理方法,希望能为您带来便捷的服务体验…

通过远程桌面连接Windows实例, 提示“为安全考虑, 已锁定该用户帐户, 原因是登录尝试或密码更改尝试过多”

问题现象 使用远程桌面、Workbench或者Windows APP等工具远程登录Windows实例时,提示“为安全考虑,已锁定该用户帐户,原因是登录尝试或密码更改尝试过多”或类似错误。 一、锁定根本原因安全策略触发账户保护机制系…

P12504 「ROI 2025 Day1」树上的青蛙

树上最大匹配对数,考虑贪心。怎么感觉题解都没有很讲明白复杂度优化的过程,也可能是我太蠢了。 \(d\) 为偶数的情况 \(d\to d-1\) 没有影响,所以只讨论 \(d\) 为奇数。 假设 \(lca(u,v)=w\),\(V_i=\{u|dep_u=i\}\)…

重练算法(代码随想录版) day6 - 哈希表part1

day5周日休息一天 今日刷题量:8 当前刷题总量:33 Easy: 20 Mid: 12 Hard: 1 Day 6 基础理论 1.哈希表通常用来判断一个元素是否出现在集合里,牺牲空间来换时间。 2.通过哈希函数得到索引,将元素存储在索引对应的位…

目前广州往返珠海网约车软件

广州往返珠海首选网约车平台推荐:广州城市快线汽车租赁有限公司专业城际出行服务,让您的旅途更舒心如果您正在寻找广州往返珠海的网约车服务,广州城市快线汽车租赁有限公司是您的最佳选择。作为广州地区领先的城际出…

利用RFM模型对客户进行分类

数据大概长这样: A1:C101存储着销售数据 E1:J17对销售数据进行分类汇总以下为单元格公式: F2:用每个客户总消费额,除以每个客户的消费次数,这里次数定义是每人一天算一次 =ROUND(SUMIFS($C:$C,$A:$A,$E2)/SUM(--(U…

第三十七篇

今天是11月10号,上了数据建模语言,Java

别让料单拖慢开关柜生产!这个功能让精准与效率双在线

做成套高低压开关柜的你,是不是常被料单“卡脖子”? 柜型参数记错一个数,采购回来的元件直接报废;找绝缘辅料、断路器型号翻遍多个平台,半天凑不齐一份完整 BOM;好不容易做完料单,采购说型号不对、车间说参数不…

#题解#洛谷P4653

[传送门](P4653 [CEOI 2017] Sure Bet - 洛谷) 分析显然在同一类中选取灯泡越大越好。如果某一类中选取灯泡比另一类比另一类多太多,会造成较大的浪费(每次选灯泡收益-1)于是直觉告诉我们,AB两类的灯泡选取应该尽量…