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

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

现在给出这 N N N 个整数 A 1 , A 2 , ⋯   , A N A_1,A_2,\cdots,A_N A1,A2,⋯,AN。(注意 A 1 ~ A N A_1 ~ A_N A1~AN 并不一定是按等差数列中的顺序给出 ),小明想知道包含这 N N N 个整数的最短的等差数列有几项?

分析

注意到因为要求最少项数所以数列两端不会再添加数,由于不按顺序给出序列,所以可以先将序列排序,如果最后等差数列的公差是 d d d,那么初始序列相邻两项的差必然是 d d d 的倍数,而 d d d 越大则序列越短,所以 d d d 取相邻两项的差的最大公约数。

注意

d d d 可以为 0 0 0,除 0 0 0 会 RE 所以得特判这种情况

代码

cpp 复制代码
#include <bits/stdc++.h>
#define int long long

using namespace std;

const int N = 1e5 + 5;
int n, a[N], d[N];

signed main(){
	cin >> n;
	for(int i = 1; i <= n; i ++){
		cin >> a[i];
	}
	sort(a + 1, a + n + 1);
	int g = 0;
	for(int i = 2; i <= n; i ++){
		g = __gcd(g, a[i] - a[i - 1]);//C++自带函数
	}
	if(g == 0){
		cout << n;
		return 0;
	}
	cout << (a[n] - a[1]) / g + 1;
	return 0;
}
相关推荐
elseif1233 小时前
【2026 CSP-J】【逐题精讲】超详细(15道选择,3道阅读,2道完善)
java·开发语言·c++·算法·csp
月光船幽幽3 小时前
拓扑实验三组协同验证方案
python·算法
殷色玫瑰4 小时前
C语言编译和链接:从 .c到 .exe,程序到底经历了什么?
linux·c语言·c++·算法
keep intensify4 小时前
C++20线程池
c++·算法·c++20
汉克老师4 小时前
GESP2026年9月认证C++一级( 第三部分编程题(2、棋盘上的奖赏))精讲
c++·gesp·小学生·学c++编程
努力努力再努力wz4 小时前
【CUDA 入门系列】核函数与线程模型:一文理清 Grid、Block、dim3、内置变量与全局索引
c++·架构
ShineWinsu4 小时前
对于Redis:ZSet类型的解析
数据库·c++·redis·缓存·面试·有序集合·zset
奋发向前wcx4 小时前
CSP-J复赛模拟赛2 王晨旭补题 2026.10.3
算法
All for pursuit.5 小时前
【回溯-5】78.子集
数据结构·c++·算法·leetcode
辛苦才能5 小时前
C++ 红黑树(上):五条规则背后的近似平衡与插入的三类情况
开发语言·c++