吃++中一堆数的子序列

时间: 2024-05-21 12:11:01 浏览: 7
题目描述: 给定一个长度为n的正整数序列 a1,a2,…,an,你需要选出一个非空子序列,使得这个子序列中的数的乘积模 109+7 的值最大。 数据范围:1≤n≤105,1≤ai≤103。 样例: 输入: 3 1 2 3 输出: 6 输入: 4 1 2 3 4 输出: 24 算法1: (暴力枚举) $O(n^2)$ 枚举所有子序列,计算乘积并取模,记录最大值。 时间复杂度 枚举子序列需要 $O(n^2)$,计算乘积需要 $O(n)$,所以总时间复杂度为 $O(n^3)$。 C++ 代码 算法2: (贪心) $O(n)$ 由于模数为质数,我们可以使用费马小定理求乘法逆元。 对于每个数,我们可以先把它分解质因数,然后对于每个质因子,我们可以计算出它在所有子序列中出现的次数,这个次数是 $2^n-1$,其中 $n$ 是这个质因子出现的次数。我们可以使用快速幂计算 $2^n-1$,然后乘上这个质因子,最后再将所有质因子的积取模,就得到了最大乘积。 时间复杂度 每个数需要分解质因数,时间复杂度为 $O(\sqrt{n}\log n)$,计算每个质因子的次数需要用到快速幂,时间复杂度为 $O(\log p)$,总时间复杂度为 $O(n\sqrt{n}\log n)$。 C++ 代码
相关问题

已知在一维数组a[m+n]中一次存放两个线性表a和b编写一个函数,将数组中两个顺序表

假设给定的一维数组 a[m+n] 存放了两个顺序表 a 和 b,我们可以使用如下的方法将这两个顺序表分开: 1. 定义一个新的数组 c[m+n] 来存放结果。 2. 将数组 a 中的元素逐个复制到数组 c 中,即将 a 的元素从下标 0 到 m-1 复制到 c 的下标 0 到 m-1。 3. 将数组 b 中的元素逐个复制到数组 c 中,即将 b 的元素从下标 0 到 n-1 复制到 c 的下标 m 到 m+n-1。 4. 返回数组 c,即为将数组 a 和 b 分开的结果。 下面是一个示例代码的实现: ```python def separate_lists(a, b, m, n): c = [0] * (m + n) for i in range(m): c[i] = a[i] for i in range(n): c[m+i] = b[i] return c ``` 这样,通过调用 `separate_lists(a, b, m, n)` 函数,就可以将数组 a 和 b 分开存放,返回值即为结果数组 c。

python修改二维列表中一列数

要修改二维列表中的一列数,可以使用循环遍历每一行,并且在每一行中修改对应的列数。下面是一个示例代码: ```python # 定义一个二维列表 matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] # 要修改的列数 col_index = 1 # 修改第 col_index 列的值为新值 new_value new_value = 10 for row in matrix: row[col_index] = new_value # 输出修改后的二维列表 print(matrix) ``` 输出结果为: ``` [[1, 10, 3], [4, 10, 6], [7, 10, 9]] ``` 以上代码中,我们遍历了二维列表的每一行,并且将第 `col_index` 列的值修改为了 `new_value`。最后输出修改后的二维列表。

相关推荐

最新推荐

recommend-type

利用python对excel中一列的时间数据更改格式操作

问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y0190000X B150 200 2019-05-10 00:00:00 2 K10Y0190000X B165 100 2019...
recommend-type

struts2+spring+hibernate分页显示完整代码

分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+...
recommend-type

Java中一个线程执行死循环有什么后果

主要介绍了Java中一个线程执行死循环有什么后果,当一个线程在执行死循环时会影响另外一个线程吗,下面为大家揭晓
recommend-type

Python中一个for循环循环多个变量的示例

今天小编就为大家分享一篇Python中一个for循环循环多个变量的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

C#中一个高性能异步socket封装库的实现思路分享

下面小编就为大家分享一篇C#中一个高性能异步socket封装库的实现思路,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

hive中 的Metastore

Hive中的Metastore是一个关键的组件,它用于存储和管理Hive中的元数据。这些元数据包括表名、列名、表的数据类型、分区信息、表的存储位置等信息。Hive的查询和分析都需要Metastore来管理和访问这些元数据。 Metastore可以使用不同的后端存储来存储元数据,例如MySQL、PostgreSQL、Oracle等关系型数据库,或者Hadoop分布式文件系统中的HDFS。Metastore还提供了API,使得开发人员可以通过编程方式访问元数据。 Metastore的另一个重要功能是跟踪表的版本和历史。当用户对表进行更改时,Metastore会记录这些更改,并且可以让用户回滚到
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。