首页 > 其他分享 >一个小计数问题

一个小计数问题

时间:2024-01-15 19:46:15浏览次数:25  
标签:frac log 一个 sum 个数 ui 计数问题 prod

模拟题,复读一下 EI 老师的 营业日志

题意:给出 \(n,m,u,v\),试计算:

\[[x^n]\prod_{i=1}^{m}\frac{1}{1-(ui+v)x}\bmod 998244353 \]

其中 \(n\le 10^{18},m\le 5\times 10^5\)。

直接分治 NTT 算出分式,再套 bostan-mori 的话复杂度是 \(O(m\log m\log n)\) 的,难以通过。

考虑使用部分分式展开:也就是将原式写为:

\[\sum_{i=1}^{m}\frac{r_i}{1-(ui+v)x} \]

的形式。

我们有比较机械的部分分式方法:

现在我们要对

\[\frac{P(x)}{Q(x)=\prod_{i=1}^{r}(1-a_ix)^{k_i}} \]

部分分式。首先我们知道其等于:

\[\sum_{i=1}^{r}\frac{R_i(x)}{(1-a_ix)^{k_i}} \]

其中 \(\deg R_i(x)\lt k_i\)。如果我们已经求得了这个形式,则计算某一项 \([x^t]\) 的值是容易的,即为:

\[\sum_{i=1}^{r}\sum_{j\le \deg R_i(x)}[x^{j}]R_i(x)\times a_i^{t-j}\dbinom{k_i+t-j-1}{t-j} \]

现在考虑如何去求。

令 \(q_i(x)=(1-a_ix)^{k_i}\),也就是说 \(Q(x)=\prod_{i=1}^{r}q_i(x)\),注意到 \(q_i(x)\) 是两两互质的。

如果暴力通分,则得到:

\[P(x)=\sum_{i=1}^{r}\frac{R_i(x)Q(x)}{q_i(x)} \]

而注意到:

\[P(x)\equiv \frac{R_i(x)Q(x)}{q_i(x)}\bmod q_i(x) \]

因此:

\[R_i(x) = P(x)\times(\frac{Q(x)}{q_i(x)}\bmod q_i(x))^{-1}\bmod q_i(x) \]

一般我们都会用到的是比较特殊的情况,例如本题。\(R_i\) 成为了常数。

首先 \(P(x)=1\),其次 \(q_i(x)=1-(ui+v)x\),这是一个一次多项式。

而多项式 \(F(x)\) 对 \((ax+b)\) 取模等价于代入它的根,也就是等价于求值 \(F(-\frac{b}{a})\)。

因此令 \(Q_i(x) = \prod_{j\neq i}\frac{1}{q_j(x)}\),则 \(R_i=Q_i(\frac{1}{ui+v})\)。

不妨来求 \(Q_i^{-1}(x)=\prod_{j\neq i}q_j(x)\),也就是:\(\prod_{j\neq i}[1-\frac{uj+v}{ui+v}]\) 。

注意到其也就是:\(\prod_{j\neq i}\frac{u(i-j)}{ui+v}\)。因此算一项 \(R_i\) 可以 \(O(\log)\) 取之。

然后整个题得到了解决。

代数手段的解决方法比较机械,但是没有这样的数学功底,该怎么办?

我们还有一个组合意义来解决这道题目,这个组合意义十分巧妙:

首先可以看成这样一个问题。我们有 \(n\) 个阶段,要从 \(n\) 个阶段里选出共 \(m\) 个数。初始你有 \(u+v\) 个数可选,每进入到下一个阶段,你就多出 \(v\) 个数可选。

我们随意考虑一个最终选出来的方案,发现难点在于无法有效的区分在哪一个数开始进入了下一阶段:如果我们直接认为第一天的 \(u+v\) 个数和第二天的 \(u+2v\) 个数全部相同固然可以区分,但是完全没有办法计算。

考虑这样一个事情:每次进入一个新的阶段的时候多了 \(v\) 个数可选。我们直接在这个时候,插入 \(v\) 个数之一,标识着进入了新阶段。这样我们的序列长度应该为 \(n+m-1\)。

然后说,每一个长度为 \(n+m-1\) 的新序列,就能唯一地对应回去一个旧方案。但是一个旧方案对应过来有 \(v^{m-1}\) 种方式。所以要除掉哦。

发现我们依旧无法计数:因为你要保证什么,第一次新增的 \(v\) 个人,出现在第二次新增的 \(v\) 个人之前,这样的事情。

我们忽略这样的限制,也即忽略阶段的顺序:就是说,有 \(m-1\) 组新增的数,每组各有 \(v\) 个。本来我们钦定了第一组的第一次出现位于第二组的第一次出现之前,现在我们删去这样的约束。最后根据对称性除掉 \((m-1)!\) 即可。

现在就可以计数了:相当于有 \(m\) 个组,第一组有 \((u+v)\) 个数字,以后的组都是 \(v\) 个数字。然后你要求 \(m\) 个组一共凑出来 \(n\) 个数字,这里是 egf 卷积的形式,然后要求第 \(2\sim m\) 组每组的数字都至少出现一次,这里直接容斥掉即可。

小练习:ABC241H Card Deck Score

\(2^n\) 容斥的部分是平凡的,然后变为计算:

\[[x^{m}]\prod_{i=1}^{n}\frac{1}{1-a_ix} \]

相信大家现在都会 \(O(n^2+n\log m)\) 计算这个了。

注意到 \(R_i\) 可以预处理出来,所以更严格的复杂度是 \(O(n^2+n2^n\log m)\)。不过也不需要这个优化。

就这?

代码

标签:frac,log,一个,sum,个数,ui,计数问题,prod
From: https://www.cnblogs.com/Cry-For-theMoon/p/17966158

相关文章

  • 【不起作用】限制前端项目安装依赖的工具只能是:npm、yarn、pnpm中的一个
    前言安装依赖的工具有好几个,有时候我们在多个项目之间切换时,容易忘记,所以我们需要设置某个项目只能使用某一种依赖安装工具正文方案一(不推荐)本方案仅供提示作用,并不会强制限制首先项目根目录下新建一个.npmrc文件,内容为:engine-strict=true然后修改项目的package.js......
  • 如何做好一个信息系统项目经理,一个项目经理的个人体会和经验总结(一)
    作为一个信息系统项目经理,最要紧的就是要明白什么是因地制宜、因势利导,只有最合适的,没有什么叫对的,什么叫错的;最忌讳的就是完美主义倾向,凡事都要寻找标准答案和最优答案,既耽误了项目进度,也迷茫了自己。以下是本人一些做信息系统项目的个人体会和经验总结,写出来供大家指点,在讨论过......
  • 盘点一个Python发票识别报错问题的处理案例
    大家好,我是皮皮。一、前言前几天在Python免费交流群【PJW】问了一个Python发票识别报错的问题,下图是他的报错截图,但是他自己看不出来哪里有问题,百度方面其实一问应该也有答案的,可是他就是有些找不到,然后找群里的好心人求助。后来【果冻和布丁】有GPT,找他帮忙问了一圈。二、实......
  • 介绍一个功能强大的shopify app——TINYIMG
    各位观众老爷,南来的北往的,东去的西走的,今天给大家推荐一个功能很强大的shopifyapp当当当那就是tinyimg这个app有多牛逼呢,且听我慢慢道来首先这个app可以用来优化图片大小,给你的网站提提速然后这个app还可以自动将图片修改为容量更小的JPG格式,大大减少了图片的容量,注:webp......
  • 如何设计一个高并发系统?
    所谓高并发系统,是指能同时处理大量并发请求,并及时响应,从而保证系统的高性能和高可用那么我们在设计一个高并发系统时,应该考虑哪些方面呢?1.搭建集群如果你只部署一个应用,只部署一台服务器,那抗住的流量请求是非常有限的。并且,单体的应用,有单点的风险,如果它挂了,那服务就不可用了......
  • 如何用 Python 编写一个简单的技术指标量化策略
    技术指标是通过对历史价格、成交量等数据进行计算,来预测未来市场走势的工具。Python作为一种流行的编程语言,提供了许多强大的库,如Pandas和NumPy,可用于处理金融数据并实现量化策略。下面我们将详细介绍如何用Python编写一个简单的技术指标量化策略。步骤一:导入所需库在开始之前,我们......
  • 我的学生真是桃李满天下啊!一个个都很有作为!
    桃李,是一个汉语词汇,读音为táolǐ,就是教师百年“树人”所得的硕果,往往比喻老师辛勤栽培的学生。桃花和李花:比喻栽培的后辈和所教的门生;比喻人的青春年少;比喻争荣斗艳、品格低下的小人庸人。 桃李满天下就是说老师教育出来的优秀学生遍布全世界,赞美教师辛勤育人。典故:据汉朝......
  • 用MATLAB创建一个矩阵,包含颗粒的ID,type,直径,密度,坐标等信息,并填充一个矩形的空间
    LIGGGHTS可以read_data命令通过读取.txt文件中的颗粒信息。.txt的内容参考链接:liggghts通过.txt文件导入颗粒信息。下面的MATLAB代码可以根据需要生成一系列的颗粒信息,包括颗粒的ID,type,diameter,density,coordinate等。颗粒数量为8000,并且能够填充一个范围在(x_min,y_min,z_min)到(......
  • 推荐一个node版本管理工具nvm
    nvm是一款Node.js版本管理工具,允许用户通过命令行快速安装、切换和管理不同的Node.js版本。nvm只适用于macOS和Linux用户的项目,如果是Windows用户,可以使用 nvm-windows 、nodist 或 nvs 替换。安装方式macOS下载方式:#方式1浏览器打开下面链接下载https:/......
  • Taro+nutui h5使用nut-signature 签名组件的踩坑记录之使用canvas实现一个签名组件
    Taro+nutuih5使用nut-signature签名组件的踩坑记录之使用canvas实现一个签名组件:https://blog.csdn.net/weixin_44514665/article/details/128176776?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170529916616800186595350%2522%252C%2522scm%2522%253A%252220140......