[蓝桥杯 2019 省 B] 等差数列

题目链接

[蓝桥杯 2019 省 B] 等差数列

题目描述

数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N N N 个整数。

现在给出这 N N N 个整数,小明想知道包含这 N N N 个整数的最短的等差数列有几项?

输入格式

输入的第一行包含一个整数 N N N

第二行包含 N N N 个整数 A 1 , A 2 , A 3 , . . . , A N A_1,A_2,A_3,...,A_N A1,A2,A3,...,AN。(注意 A 1 , A 2 , A 3 , . . . , A N A_1,A_2,A_3,...,A_N A1,A2,A3,...,AN 并不一定是按等差数列中的顺序给出 )。

输出格式

输出一个整数表示答案。

输入输出样例
输入

5
2 6 4 10 20

输出

10

提示

包含 2,6,4,10,20 的最短的等差数列是 2,4,6,8,10,12,14,16,18,20

数据范围
  • 2 ≤ N ≤ 1 0 5 2 \leq N \leq 10^5 2N105
  • 1 ≤ A i ≤ 1 0 9 1 \leq A_i \leq 10^9 1Ai109

解法:数学

对于一个等差数列,我们要使其项数越少 等价于 让公差 d d d 越大!

对于原数列,我们先将其从小到大排序,得到新数列 a = { a 1 , a 2 , a 3 , . . . , a N } a = \{ a_1,a_2,a_3,...,a_N \} a={a1,a2,a3,...,aN}

对于其中任意两项的差值 x = a i + 1 − a i x = a_{i + 1} - a_i x=ai+1ai,都应该是公差 d d d 的倍数,即 d ∣ x d | x dx d d d 能够整除 x x x

对于所有的这样的差值 x x x,我们要使得 公差 d d d 最大,等价于求其最大公约数 g g g

对于求出的最大公约数 g g g

  • 如果 g = 0 g = 0 g=0,说明公差 d = 0 d = 0 d=0,原数列所有元素都相等,故等差数列得长度就等于原数列的元素个数 N N N
  • 如果 g > 0 g > 0 g>0,那么等差数列的长度就为 1 + ( a N − a 1 ) / g 1 + (a_N - a_1) / g 1+(aNa1)/g

时间复杂度: O ( n ) O(n) O(n)

C++代码:

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int main(){int n;cin>>n;vector<int> a(n);for(int i = 0;i < n;i++) cin>>a[i];sort(a.begin(), a.end());int d = a[n - 1] - a[0], min_d = 0;for(int i = 0;i < n - 1;i++) min_d = __gcd(min_d, a[i + 1] - a[i]);int ans = 0;if(min_d) ans = 1 + d / min_d;else ans = n;cout<<ans<<'\n';return 0;
}

Java代码:

import java.util.*;
import java.io.*;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));public static int gcd(int a, int b) {if(b == 0) return a;else return gcd(b, a % b);}public static void main(String[] args) throws Exception {int n = Integer.parseInt(in.readLine().trim());int[] a = new int[n];String[] str = in.readLine().split(" ");for(int i = 0;i < n;i++) a[i] = Integer.parseInt(str[i]);Arrays.sort(a);int min_d = 0, d = a[n - 1] - a[0];for(int i = 0;i < n - 1;i++) {min_d = gcd(min_d, a[i + 1] - a[i]);}int ans = 0;if(min_d > 0) ans = 1 + d / min_d;else ans = n;System.out.println(ans);}
}

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

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

相关文章

亚马逊运营要使用什么海外代理IP?

代理IP作为网络活动的有力工具&#xff0c;同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台&#xff0c;吸引了大量的跨境电商玩家入驻&#xff0c;想要做好亚马逊&#xff0c;养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢&#xff1f;如何使用&#xf…

复杂系统未来演化很难准确预测

复杂系统的未来演化很难准确预测。这是由于复杂系统包含大量相互作用的组成部分&#xff0c;其行为和发展受到多种因素的影响&#xff0c;包括内部动力、外部环境变化以及意外事件等。此外&#xff0c;复杂系统通常呈现非线性关系&#xff0c;即系统的变化可能以不可预测的方式…

JS-02-javaScript快速入门

一、javaScript代码的编写位置 JavaScript代码可以直接嵌在网页的任何地方&#xff0c;但是一般&#xff0c;我们用如下编写方式。 1-1、直接写到HTML文件中 通常我们都把JavaScript代码放到<head>中&#xff0c;由<script>...</script>包含的代码就是Java…

【深度学习】1. 深度学习概述

感知器模型 人脑中的神经元:一个神经元通常具有多个树突&#xff0c;主要用来接受传入信息;而轴突只有一条&#xff0c;轴突尾端有许多轴突末梢可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接&#xff0c;从而传递信号。 而在计算机的神经网络中&#xff…

985硕的4家大厂实习与校招经历专题分享(part2)

我的个人经历&#xff1a; 985硕士24届毕业生&#xff0c;实验室方向:CV深度学习 就业&#xff1a;工程-java后端 关注大模型相关技术发展 校招offer: 阿里巴巴 字节跳动 等10 研究生期间独立发了一篇二区SCI 实习经历:字节 阿里 京东 B站 &#xff08;只看大厂&#xff0c;面试…

【leetcode刷刷】455.分发饼干 、376. 摆动序列 、53. 最大子序和

455.分发饼干 376. 摆动序列 其实贪心的想法&#xff0c;做过一次的话就不会很难想了。但这道题需要考虑的特殊情况比较复杂&#xff0c;包括平台什么的。最左边和最右边也需要考虑&#xff1a;最左边&#xff0c;添加一个平台。 可以假设&#xff0c;数组最前面还有一个数字…

Mysql - is marked as crashed and should be repaired

概述 上周发生了一个Mysql报错的问题&#xff0c;今天有时间整理一下产生的原因和来龙去脉&#xff0c;Mysql的版本是5.5,发生错误的表存储引擎都是MyISAM,产生的报错信息是Table xxxxxx is marked as crashed and should be repaired。 定位问题 产生的后果是Nginx服务没有…

Unity骚操作: Exception堆栈追踪

Exception堆栈追踪 上代码 try{SaveData saveData SaveLoadManager.Load(migrate: false);if (saveData ! null){Version v new Version(saveData.gameVersion);Version v2 new Version(Cheats.version);if (v < v2){SaveLoadManager.MigrationBackupLocalSave();SaveL…

C++入门知识点

文章目录 一、C的域作用限定符1.1全局域1.2限定域作用范围 二、C的命名空间域2.1单个命名空间的变量访问和单个不同命名空间的相同变量名的访问2.2命名空间的嵌套调用 三、C的流插入、流提取操作符四、C的缺省参数4.1函数的全缺省4.1函数的部分缺省 五、C的函数重载5.1函数重载…

【操作系统学习笔记】文件管理1.5

【操作系统学习笔记】文件管理1.5 参考书籍: 王道考研 视频地址: Bilibili 逻辑结构 VS 物理结构 逻辑结构: 从用户角度看&#xff0c;由创建文件的用户自己设计的 无结构文件 // 在用户看来是一篇连续的空间 FILE *fp fopen("test.txt", "r"); if (fp …

【算法集训】基础算法:模拟

一、基本理解 顾名思义&#xff0c;就是题目要求做什么&#xff0c;代码中就跟着做就可以。 二、题目练习 1252. 奇数值单元格的数目 根据题目要求列出如下代码。需要注意填充列和行的时候注意下标。 int oddCells(int m, int n, int** indices, int indicesSize, int* in…

this关键字

this关键字 this 是 Java 的一个关键字&#xff0c;表示某个对象 this 可以出现在构造方法、实例方法中&#xff0c;但不可以出现在类方法中 出现在构造方法中&#xff0c;代表使用该构造方法创建的对象出现在实例方法中&#xff0c;代表正在调用该方法的当前对象 一、构造…

Docker-容器网络互联

目录 1 前言 2 常用指令 3 实现容器互联 3.1 自定义网络 3.2 让容器连接创建的网络 3.2.1 容器创建后连接网络 3.2.2 容器创建时连接网络 3.3 尝试使用容器名访问(测试) 1 前言 在默认情况下&#xff0c;docker中的容器都是连接到一个虚拟的网桥上的&#xff0c;这为独…

关于yolov8的DFL模块(pytorch以及tensorrt)

先看代码 class DFL(nn.Module):"""Integral module of Distribution Focal Loss (DFL).Proposed in Generalized Focal Loss https://ieeexplore.ieee.org/document/9792391"""def __init__(self, c116):"""Initialize a convo…

Spring MVC PathVariableMethodArgumentResolver原理解析

在Spring MVC中&#xff0c;PathVariableMethodArgumentResolver是一个非常重要的组件&#xff0c;它负责解析URL路径中的变量并将其绑定到处理器方法的参数上。通过PathVariable注解&#xff0c;开发者可以方便地从URL中提取参数值&#xff0c;并传递给后端逻辑进行处理。本文…

【Web前端入门学习】—CSS

目录 CSS简介CSS语法CSS三种导入方式CSS选择器元素选择器&#xff08;标签选择器&#xff09;类选择器ID选择器通用选择器子元素选择器后代选择器&#xff08;包含选择器&#xff09;并集选择器&#xff08;兄弟选择器&#xff09;伪类选择器伪元素选择器 CSS常用属性盒子模型网…

电脑工作电压是多少你要看看光驱电源上面标的输入电压范围

要确定电脑的工作电压&#xff0c;必须查看电源上标注的输入电压范围。 国内法规规定民用220V电压范围为10%-15%&#xff0c;也就是说通信220V电压正常范围为187--242V&#xff0c;供电设备一般为180V。 --250V电压范围&#xff0c;即正常情况下电脑电源电压不低于187V即可工作…

css相邻元素边框重合问题,解决方案

1、如下图所示&#xff0c;在给元素设置边框后&#xff0c;相邻元素会出现重合的问题 2、解决方案 给每个元素设置margin-top以及margin-left为负的边框 <div style"width: 300px;display: flex;flex-wrap: wrap;margin-top: 50px;"><div style"border…

【数据结构】二、线性表:5.静态链表的定义及其基本操作(定义、初始化、插入、查找、删除、遍历、长度、特点)

文章目录 5.静态链表5.1定义5.2初始化5.3插入5.4查找5.5删除5.6遍历5.7长度5.8特点 5.静态链表 静态链表是使用数组来模拟链表结构的一种数据结构&#xff0c;用数组的方式实现的链表。 它与传统链表的区别在于&#xff0c;静态链表使用数组保存节点&#xff0c;每个节点包括…

笔记77:理解C++中头文件和源文件的作用【程序编译过程】

一、C 编译模式 通常&#xff0c;在一个 C 程序中&#xff0c;只包含两类文件—— .cpp 文件和 .h 文件。其中&#xff0c;.cpp 文件被称作 C 源文件&#xff0c;里面放的都是 C 的源代码&#xff1b;而 .h 文件则被称作 C 头文件&#xff0c;里面放的也是 C 的源代码。 C 语…