题解:qoj8329 Excuse

news/2025/10/17 18:33:08/文章来源:https://www.cnblogs.com/LUlululu1616/p/19148661

题意:给出一个数 \(n\),现在我通过下面这个算法生成一个长为 \(n\) 的序列 \(a\)

  • 先进行 \(n\) 次随机扔一个硬币,然后如果你最后连续 \(k\) 次投出的是正面朝上,那么就将一个 \(k\) 加入序列末尾。

问序列 \(a\)\(\operatorname{mex}\) 的期望值。

做法:

首先转化为 \(\operatorname{mex}\ge j\) 的概率和。

然后枚举 \(k\in[1,n]\),那么就要求 \([0,k-1]\) 全都要选至少一个,剩余的都可以。我们不妨认为,对于 \(i\in[0,k-1]\) 出现的概率为 \(2^{-(i+1)}\),而 \(i\ge k\) 的概率是 \(2^{-(k+1)}\)。那么我们枚举每个元素出现次数,注意我可以安排他们的位置,可以得到概率是:

\[P_k = n!\sum_{a_0+a_1+\cdots +a_k=n,\forall t\in [0,k-1],a_t\not=0} \prod_{i=0}^k (2^{-(i+1)})^{a_i}\frac{1}{a_i!} \]

把所有东西按 \(i\) 离开,发现就是个 exp 状物,那么可以改写为:

\[P_k=n!\prod_{i=0}^{k-1}(e^{\frac{x}{2^{i+1}}} - 1)\times e^{\frac{x}{2^{k+1}}} \]

然后注意到中间这个 \(\prod\) 感觉很有性质,因为他们长得都很像。我们这里设 \(xf(x)=e^x-1\),至于为什么需要前面有个 \(x\) 后面会说,再改写柿子:

\[P_k=n!\frac{x^k}{2^{\frac{k(k+1)}{2}}}\prod_{i=0}^{k-1}f(\frac{x}{2^{i+1}})\times e^{\frac{x}{2^{k+1}}} \]

然后我们考虑,如果我们能算出来 \(g(x) = \prod\limits_{i=0}^{\infty}f(\frac{x}{2^{i+1}})\) 这个无限乘积,那么我就可以用 \(g(x)\times g^{-1}(\frac{x}{2^{k}})\) 直接算出来中间这个 \(\prod\)

考虑怎么计算 \(g\),求积很麻烦,直接取 \(\log\) 换成求和,因为我们特意上面凑了一个 \(x\) 使得 \(f\) 的零次项是 \(1\) 所以可以直接取 \(\log\),得到:

\[\log g = \sum_{i=0} \log f(\frac{x}{2^{i+1}}) \]

然后直接展开右边的每一项,那么第 \(n\) 项会多带一个 \(\sum \frac{1}{2^{ni}}\) 的系数,也就是 \(\frac{1}{2^n-1}\),直接给这个 \(f\) 算出来然后很容易算出 \(g\)

之后为了更方便看出变化的部分,会用颜色标记。

然后我们带回到整体的柿子里去,可以得到:

\[ans = n![x^n]\sum_{k=1}\frac{x^k}{2^{\frac{k(k+1)}{2}}} g(x)\textcolor{red}{g^{-1}(\frac{x}{2^{k}})e^{\frac{x}{2^k}}} \]

\(h(x) = g^{-1}(x)e^{x}\),有:

\[ans = n![x^n]g(x)\sum_{k=1}\textcolor{blue}{\frac{x^k}{2^{\frac{k(k+1)}{2}}}} \textcolor{red}{h(\frac{x}{\textcolor{green}{2^k}})} \]

把后面这个东西的卷积展开,有:

\[a_n=\sum_{k=1}\textcolor{blue}{2^{-\frac{k(k+1)}{2}}}\times \textcolor{green}{2^{-k(n-k)}} \times \textcolor{red}{h_{n-k}} \]

这个东西中间用 Chirp Z 变换一下,\(k(n-k)=\binom{n}{2}-\binom k 2 -\binom {n-k}2\) 然后分离一下 \(n,k,n-k\),可以得到:

\[a_n2^{\binom n 2}=\sum_{k=1}\textcolor{blue}{2^{-k}}\textcolor{red}{h_{n-k}2^{\binom {n-k}2}} \]

发现这个东西是可以递推计算的。

然后直接带回去解就可以了,复杂度 \(O(n\log n)\),瓶颈在于求 exp。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 5e5 + 5, mod = 998244353, gb = 3, gi = (mod + 1) / gb;
int qpow(int x, int k, int p) {int res = 1;while(k) {if(k & 1)res = res * x % p;x = x * x % p, k >>= 1;}return res;
}
int rev[maxn], inv[maxn];
void prepare(int n) {inv[1] = inv[0] = 1;for (int i = 2; i <= n; i++)inv[i] = (mod - mod / i) * inv[mod % i] % mod;
}
void init(int len) {for (int i = 0; i < len; i++) {rev[i] = rev[i >> 1] >> 1;if(i & 1)rev[i] |= (len >> 1);}
}
struct Poly {vector<int> a;void resize(int N) {a.resize(N);}void clear() {a.clear();}int size() {return a.size();}int& operator[](int x) {return a[x];}Poly() {}Poly(int N) {a.resize(N);}void NTT(int f) {for (int i = 0; i < size(); i++)if(i < rev[i])swap(a[i], a[rev[i]]);for (int h = 2; h <= size(); h <<= 1) {int d = qpow((f == 1 ? gb : gi), (mod - 1) / h, mod);for (int i = 0; i < size(); i += h) {int nw = 1;for (int j = i; j < i + h / 2; j++) {int a0 = a[j], a1 = a[j + h / 2] * nw % mod;a[j] = (a0 + a1) % mod, a[j + h / 2] = (a0 - a1 + mod) % mod;nw = nw * d % mod;}}}if(f == -1) {int inv = qpow(size(), mod - 2, mod);for (int i = 0; i < size(); i++)	a[i] = a[i] * inv % mod;}}friend Poly operator*(Poly f, Poly g) {int len = 1, t = f.size() + g.size() - 1;while(len < t)len <<= 1;init(len), f.resize(len), g.resize(len);f.NTT(1), g.NTT(1);for (int i = 0; i < len; i++)f[i] = f[i] * g[i] % mod;f.NTT(-1);f.resize(t);return f; }friend Poly operator+(Poly f, Poly g) {int d = max(f.size(), g.size());f.resize(d), g.resize(d);for (int i = 0; i < d; i++)f[i] = (f[i] + g[i]) % mod;return f;}friend Poly operator-(Poly f, Poly g) {int d = max(f.size(), g.size());f.resize(d), g.resize(d);for (int i = 0; i < d; i++)f[i] = (f[i] - g[i] + mod) % mod;return f;}void print() {for (int i = 0; i < size(); i++)cout << a[i] << " ";cout << endl;}friend Poly operator+(Poly f, int v) {f[0] = (f[0] + v) % mod;return f;}friend Poly operator-(Poly f, int v) {f[0] = (f[0] - v + mod) % mod;return f;}
} ;
Poly get_deriv(Poly f) {Poly g(f.size() - 1);for (int i = 0; i < g.size(); i++)g[i] = f[i + 1] * (i + 1) % mod;return g;
}
Poly get_integ(Poly f) {Poly g(f.size() + 1);for (int i = 1; i < g.size(); i++)g[i] = f[i - 1] * inv[i] % mod;return g;
}
Poly get_inv(Poly f, int lim) {if(lim == 1) {f.resize(1);f[0] = qpow(f[0], mod - 2, mod);return f;}Poly g = get_inv(f, lim + 1 >> 1);int len = 1;while(len < lim * 2)len <<= 1;init(len);f.resize(lim), f.resize(len), g.resize(len);f.NTT(1), g.NTT(1);for (int i = 0; i < len; i++)f[i] = (2 * g[i] - f[i] * g[i] % mod * g[i] % mod + mod) % mod;f.NTT(-1);f.resize(lim);return f;
}
Poly get_ln(Poly f, int lim) {return get_integ(get_deriv(f) * get_inv(f, lim));
}
Poly get_exp(Poly f, int lim) {if(lim == 1) {Poly ans(1); ans[0] = 1;return ans;}f.resize(lim);Poly g = get_exp(f, lim + 1 >> 1), h = get_ln(g, lim);h = (f - h + 1);g = g * h;g.resize(lim);return g;
} 
Poly shift(Poly f) {for (int i = 0; i < f.size() - 1; i++)f[i] = f[i + 1];f.resize(f.size() - 1);return f;
}
int n;
Poly g, h;
void get_gh() {Poly f; f.resize(n + 2);f[1] = 1;f = shift(get_exp(f, n + 2) - 1);f = get_ln(f, n + 1);g.resize(n + 1);for (int i = 1; i <= n; i++)g[i] = f[i] * qpow(qpow(2, i, mod) - 1, mod - 2, mod) % mod;g = get_exp(g, n + 1);f.clear(), f.resize(n + 1);f[1] = 1, f = get_exp(f, n + 1);h = get_inv(g, n + 1) * f; h.resize(n + 1);
}
signed main() {cin >> n;prepare(n + 2);get_gh();Poly res; res.resize(n + 1);for (int i = 0; i <= n; i++)h[i] = h[i] * qpow(2, i * (i - 1) / 2, mod) % mod;int inv2 = (mod + 1) / 2;for (int i = 1; i <= n; i++) res[i] = (res[i - 1] * inv2 % mod + inv2 * h[i - 1] % mod) % mod;for (int i = 1; i <= n; i++)res[i] = res[i] * qpow(qpow(2, i * (i - 1) / 2, mod), mod - 2, mod) % mod;res = res * g;for (int i = 1; i <= n; i++)res[n] = res[n] * i % mod;cout << res[n] << endl;return 0; 
}

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

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

相关文章

`uv run pytest` does not work

错误信息 uv初始化的python项目下,执行 uv run pytest 提示错误信息:❌Failed to canonicalize script path解决方法: 1,编辑 pyproject.toml,并保存: [tool.pytest.ini_options] pythonpath = ["."]2,…

VMware17.6图文安装教程(附安装包)VMware17.6

一、VMware17.6下载 1.官方正版VMware下载链接下载链接https://pan.quark.cn/s/6827b0764042 二、VMware17.6软件介绍 VMware Workstation Pro 17.6是一款功能强大的桌面虚拟化软件,以下是其相关介绍: 功能特性 多操…

Sourcetree - Git 备份

在 Sourcetree 中使用 git bundle 打开 Sourcetree 的内置终端: 在 Sourcetree 中打开你的仓库。 寻找 “终端”(Terminal) 标签页或相关功能。这通常在 Sourcetree 的主界面底部或某个侧边栏中。如果找不到,可以尝…

uni-app x实现上下拉动,动态加载数据

一、概述 上一篇文章,已经实现了商品列表组件封装以及使用。 但是商品列表页面,还需要实现,上下拉动,动态加载数据。 效果如下:二、onReachBottom onReachBottom是微信小程序页面生命周期中的回调函数,用于检测页…

HyperWorks许可状态监控工具

在现今日益复杂的工程设计与仿真环境中,对软件许可状态的有效监控已成为确保工作流程顺畅、资源高效利用的关键。为了满足这一需求,HyperWorks推出了强大的许可状态监控工具,帮助用户实时了解许可使用情况,优化资源…

mysql删除数据表某个日期之前的数据

DELETE FROM 表名WHERE 时间字段名称 < 2025-09-28 00:00:00; (如果是时间戳就填时间戳数字)每天进步一点点

从创作到分析:2025 公众号排版工具全维度测评榜单

从创作到分析:2025 公众号排版工具全维度测评榜单2025公众号工具测评:壹伴AI编辑器全链路优势深度解析 作为新媒体运营者,你是否常陷入这些困境:熬夜赶稿后排版格式反复出错,跨平台分发时样式全乱;拟标题时反复修…

企业微信ipad协议稳定防封的最新最全功能

企业微信ipad协议稳定防封的最新最全功能免费试用&&技术支持: const wx="mff031829" 企业微信ipad的技术特点:多端共存:iPad 协议独立运行,不影响 PC 端和手机端的登录状态,实现三端同步在线。…

企业微信协议ipad,稳定防封私有化部署私域流量聚合聊天,机器人实现方案

企业微信协议ipad,稳定防封私有化部署私域流量聚合聊天,机器人实现方案企业微信iPad协议是一种基于企业微信iPad版本的智能接口服务,通过API接口,企业可以实现对客户群的精细化管理和高效营销。以下是关于企业微信…

重新思考钓鱼攻击意识培训:网络安全的关键反思

本文探讨了钓鱼攻击意识培训的有效性与潜在风险,分析了当前企业安全培训中存在的误区,并提出了构建更有效网络安全防护体系的具体建议。在MGM事件发生后,我认为这是讨论钓鱼攻击意识的好时机。 据传闻,攻击者能够冒…

任务分解与小模型如何降低AI成本

本文探讨如何通过任务分解和使用小型专用语言模型替代单一大型模型来降低AI应用成本,分析系统复杂度与性能间的平衡,并展示个性化网站生成的具体案例。任务分解与小型语言模型如何让AI更经济 生成式AI应用的广泛使用…

spring事件监听的核心机制

spring事件监听的核心机制Spring 事件监听机制的核心是基于观察者模式(Observer Pattern) 实现的组件间解耦通信机制,通过事件(Event)、监听器(Listener)、事件发布者(Publisher) 三者的协作,实现 “发布 - …

直播软件开发搭建公司

作为专ye的直播软件开发公司,山东(泰安)布谷鸟网络科技有限公司深耕直播软件开发和搭建业务,致力于为客户提供稳定、高效的直播解决方案,推出布谷直播源码,满足不同业务场景的定制需求。本文将从多个角度解析直播软…

freeswitch的proxy_media模式下video流的问题与修正

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 测试过程中发现fs的proxy_media模式的一个bug,就是video媒体流的转发处理有问题。 环境 CentOS 7.9 freeswitch 1.6.20 问题 fs配置为proxy_media模式,A路发起…

DNS 相关

dig 使用 背景 example.com 是一个公网注册的域名,在阿里云配置权威DNS解析,本地内网服务器也搭建了一个bind server同样配置了example.com的zone解析该域名,本地所有ECS的/etc/resolv.conf 配置的 nameserver为 10…

2025 年无锡专线物流公司最新推荐排行榜:聚焦个性化运输解决方案,精选优质服务商往返无锡/冷链无锡/公路无锡/大件无锡专线物流公司推荐

当前工业生产节奏持续加快,无锡地区企业对专线物流定制服务的需求愈发多样化、精细化,涵盖往返运输、冷链配送、大件机械运输等多个细分场景。然而,物流市场中企业资质、服务能力参差不齐,部分服务商存在定制方案不…

Dubbo入门-通过spring-boot来动手实践

第一种--快速创建应用 可以直接下载示例项目,链接:https://github.com/apache/dubbo-samples/tree/master/11-quickstart 第二种--新建项目 新建 Java 空白 Maven 项目jdk17之后我们还需要创建 dubbo-spring-boot-de…

使用ceph rdb做k8s后端存储(ceph-csi storageclass

环境:Os:Centos 7k8s:v1.28 ceph:14.2.22###############################################ceph端分配存储##############################1.分配osd pool和创建用户[root@master tmp]#ceph osd pool create dynamics-…

2025 最新火烧板源头厂家推荐排行榜:自有矿山加持 + 品质卓越,芝麻灰 / 五莲花等石材采购优选指南

当前火烧板市场面临多重采购困境:部分厂家缩减生产流程导致产品色泽不均、质地松软,难以适配建筑与装修行业的高品质需求;多数中小型商家缺乏自有矿山,原材料依赖外购,常因供应中断或品质波动延误工程进度;加工精…

【IEEE出版、吉首大学主办】第二届智能机器人与自动控制国际学术会议 (IRAC 2025)

第二届智能机器人与自动控制国际学术会议 (IRAC 2025) 2025 2nd International Conference on Intelligent Robotics and Automatic Control 在这里看会议官网详情 中国-吉首 | 2025年11月28日-30日 收录类型:IEEE …