[Gym 102770L]List of Products 题解
简要题意#
记 为从小到大第 个质数,并记 为正整数 中质因子 的最高次幂( 则为 )。现在对于两个正整数 ,重新定义它们的大小关系:
- 若 ,则认为 与 相等。
- 否则,找到最小的正整数 使得 ,若 则认为 较小,否则认为 较小。
现在给出两个长度分别为 的正整数序列 ,求将所有 按上述规则从小到大排列后第 个数。
题解#
记 为值域大小,下述 “” 均表示题目中定义的小于关系。
首先,考虑对于两个整数 ,如何尽快比较他们的大小。由于值域不大,我们可以通过预处理筛出每个正整数的最小质因子,来做到 的分解质因数,这样就可以在 的时间内比较值域内任意两个数大小(值域内任意两个数的积是类似的)。
题目所求是第 大,所以自然想到二分。假如已经确定 ( 为答案),那么如何表示出 的可能取值呢?尝试枚举 ,寻找哪些 满足 。这时候,可以发现一个关键的性质:如果有 ,那么就有 (这是因为对于任意质数 , )。
所以,我们可以先对 两个序列分别按照题目规则排序。这样,对于固定的 ,满足 的 一定是一段连续的下标区间 。而且如果 ,那么 (这里的“”是通常实数上的大小关系)。这样,就可以通过双指针加上 的大小比较, 的时间内找出每个 的 。
接下来,我们要选取二分的检验值。像通常一样取区间中点显然不好办到,但是我们可以在所有 个可能的乘积中随机找一个。因为在区间 内随机一个值,期望为 ,所以区间长度也会期望变成原来的一半,那么二分的期望时间复杂度就可以保证。这样,我们每次在可能的乘积中随机一个,然后通过双指针处理出它对应的排名区间(因为可能有相同的数),如果可以是第 个,就得到答案,否则更新 ,期望二分次数是 。
总复杂度 (其实二分部分和排序部分的复杂度是相当的)。
作者:Esofar
出处:https://www.cnblogs.com/complexor/p/17590757.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】