Solution - Atcoder ARC116C Multiple Sequences

news/2024/10/7 20:38:44/文章来源:https://www.cnblogs.com/rizynvu/p/18450537

一个 \(\mathcal{O}(m^{\frac{3}{4}}\log m)\) 做法。

\(a_0 = 1\)

对于倍数问题,考虑类似差分的思想,定义 \(b_i = \frac{a_i}{a_{i - 1}}(1\le i\le n)\),那么合法的 \(a\)\(b\) 是双射的,就只需要考虑对 \(b\) 计数了。

考虑到因为有 \(\prod\limits_{i = 1}^n b_i\le m\),所以 \(\sum\limits_{i = 1}^n [b_i > 1]\le \lfloor\log_2 m\rfloor\),即 \(b_i\) 中大于 \(1\) 的个数不超过 \(\log_2 m\) 个。

那么就只需要考虑 \(b_i > 1\) 的方案,再考虑把这些值放进 \(b\) 中的方案数。

对于把这些值放进 \(b\) 中的方案数是比较好算的。
考虑选了 \(k\)\(> 1\) 的数,方案实际上就是把这 \(k\) 个数放在 \(k\) 个位置上,其余的 \(n - k\) 个位置填成 \(1\),那么方案数就是 \(\binom{n}{k}\)

考虑到 \(k\le \log_2 m\),所以 \(\binom{n}{k}\) 是可以直接 \(\mathcal{O}(k)\) 推的(\(\binom{n}{m}\times \frac{n - m}{m + 1} = \binom{n}{m + 1}\)),复杂度不用带 \(\mathcal{O}(n)\)

接下来就是考虑求 \(b_i > 1\) 的方案数了。
那么要求乘积 \(\le m\),如果直接维护乘积 \(p\) 显然不太行。
此时考虑到因为有 \(xy\le m \iff x\le \lfloor\frac{m}{y}\rfloor\)\(\lfloor\frac{\lfloor\frac{m}{x}\rfloor}{y}\rfloor = \lfloor\frac{m}{xy}\rfloor\),所以实际上只需要维护 \(\lfloor\frac{m}{p}\rfloor\) 的值。

这样的好处就很明显了,因为 \(\lfloor\frac{m}{p}\rfloor\) 只有 \(\mathcal{O}(\sqrt{m})\) 个值,明显需要求的位置数量变少了。

于是可以设 \(f_{q, i}\)\(\lfloor\frac{m}{p}\rfloor = q\) 且已经选了 \(i\) 个数的方案数。
转移就考虑由 \(f_{q, i}\)\(f_{\lfloor\frac{q}{w}\rfloor, i + 1}(1 < w \le q)\) 转移,即选了一个数 \(w\)
初值就是 \(f_{m, 0} = 1\) 了,即一个不选。

发现这个转移其实也是可以用整除分块来优化的,这就不描述了。

时间复杂度分析同杜教筛一样,只是多带了个维护选的数量的 \(\lfloor\log_2 m\rfloor\) 项,时间复杂度 \(\mathcal{O}(m^{\frac{3}{4}}\log m)\)

给出的代码实现是直接搜索的 \(b_i\not = 1\) 的方案,组合数的预处理也是 \(\mathcal{O}(n)\) 的,跑的还行,可以借助这份代码理解。

#include<bits/stdc++.h>
using ll = long long;
constexpr ll mod = 998244353;
inline ll qpow(ll a, ll b, ll v = 1) {while (b)b & 1 && ((v *= a) %= mod), b >>= 1, (a *= a) %= mod;return v;
}
const int maxn = 2e5 + 10;
ll fac[maxn], ifac[maxn];
inline ll binom(int n, int m) {return fac[n] * ifac[m] % mod * ifac[n - m] % mod;}
int n, m;
ll ans;
void dfs(int c, int val, ll f) {if (c > n)return ;(ans += f * binom(n, c)) %= mod;for (int l = 2, r; l <= val; l = r + 1) {r = val / (val / l);dfs(c + 1, val / l, f * (r - l + 1) % mod);}
}
int main() {scanf("%d%d", &n, &m);for (int i = fac[0] = 1; i <= n; i++) fac[i] = fac[i - 1] * i % mod;ifac[n] = qpow(fac[n], mod - 2);for (int i = n; i; i--) ifac[i - 1] = ifac[i] * i % mod;dfs(0, m, 1);printf("%lld\n", ans);return 0;
}

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

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

相关文章

[42] (多校联训) A层冲刺NOIP2024模拟赛03

今天的乐子今天的乐子2 昨天晚上做梦 梦见自己被关进戒网瘾学校 里面的老师全和疯子一样 然后我和这帮疯子老师比疯 疯子老师发现他们没我疯 所以就把我放了今天的乐子3 lhx 罗曼蒂克的辟谷A.五彩斑斓 赛时的想法 \(n^4\) 的做法,设 \(f_{i,j,k,l}\) 表示以 \((i,j)\) 为左上角…

Metasploit渗透测试框架学习(一)基本使用教程

1.Metasploit框架结构 1.1总览基础库文件Rex为最底层,实现网络套接字、网络应用协议、客户端服务端交互、数据库支持等 framework-core实现与上层模块交互的接口 framework-base对framework-core的扩展封装,用于提供各种接口供用户调用基于framework-base实现的六大模块Explo…

统计学(十三)——相关分析

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 相关分析是用于研究多个变量之间相互关系的统计方法,最早由英国统计学家卡尔皮尔逊(Karl Pearson)于1896年提出。皮尔逊通过对变量间线性关系的深入研究,…

前端模块化进化史:从全局 function 到 ES Modules

目前,前端开发已经离不开由 CommonJS、ES Modules 和 Webpack 构建的模块化开发环境。无论是 JavaScript、CSS、图片还是其他资源,都可以作为一个模块来处理。那么,模块化究竟是如何发展到今天的呢? 全局函数模式 最初的前端模块化尝试是通过 全局函数来实现的。例如,在一…

CF131C题解

贪心,优先队列,CF 2200传送门:https://codeforces.com/problemset/problem/134/C 关注到题目的两个限制:1. 一个人只能与另外同一人交换一张卡牌。2. 一个人只能交换自己原来颜色的卡牌。 对于2条限制条件,显然有贪心思路:尽量让更多的人手持原有的卡牌。对于当前待交换的…

『模拟赛』多校A层冲刺NOIP2024模拟赛03

『模拟赛记录』多校A层冲刺NOIP2024模拟赛03Rank 炸了,触底反弹A. 五彩斑斓(colorful) 签,又没签上。 考虑如何一步步优化暴力。最暴力的思想 \(\mathcal{O(n^4)}\) 枚举每个矩形,判断四个顶点颜色。稍微优化些,两次 \(\mathcal{O(n^2)}\) 跑出对于行/列每个点下一个与之…

加装spark-3.5.3

集群版本 hadoop-3.4.0 hive-3.1.3 zookeeper-3.9.2 hbase-2.6.0(1.0.0以上需要zookeeper-3.4.0以上) spark-3.5.3(只能选2.13.0) scala-2.13.0(jdk8仅支持x.x.0系)总结一下:JDK8和scala-2.13.0必选。1.安装scala 1.1 下载解压 tar zxvf scala-2.13.0.tgz 1.2 配置环境变…

高级程序语言第二次个人作业

高级程序语言第二次作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2024C/homework/13282学号 222200424姓名 赵伟豪编程练习3.13.23.33.43.53.63.73.8示例程序3.13.23.33.43.53.63.73.83.93.10总结与收获…

浏览器的渲染原理

浏览器渲染原理 五个渲染流程Parse 阶段:解析 HTMLStyle 阶段:样式计算三个阶段:收集,划分和索引所有样式表中存在的样式规则 访问每个元素并找到适用于该元素的所有规则,CSS 引擎遍历 DOM 节点,进行选择器匹配,并且匹配的节点执行样式设置 结合层叠规则和其他信息为节点…

CSP2024 前集训:多校A层冲刺NOIP2024模拟赛03

前言T1 没想到正难则反,脑瘫了没敢用 bitset(复杂度擦边但卡常能过),T2 空间开大了挂了 \(100pts\),\(T3\) 是原。 T1 五彩斑斓部分分 \(20pts\):\(O(n^4)\) 暴力。部分分 \(20+?pts\):进行一些优化,极限数据下仍是 \(O(n^4)\)。部分分 \(60\sim 100pts\):bitset 优化…

在C#中使用适配器Adapter模式和扩展方法解决面向的对象设计问题

之前有阵子在业余时间拓展自己的一个游戏框架,结果在实现的过程中发现一个设计问题。这个游戏框架基于MonoGame实现,在MonoGame中,所有的材质渲染(Texture Rendering)都是通过SpriteBatch类来完成的。举个例子,假如希望在屏幕的某个地方显示一个图片材质(imageTexture)…