【洛谷 8682】[蓝桥杯 2019 省 B] 等差数列

发布时间 2023-10-27 16:10:30作者: #Cookies#

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

## 题目描述

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

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

## 输入格式

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

第二行包含 $N$ 个整数 $A_1,A_2,\cdots,A_N$。(注意 $A_1 ∼ A_N$ 并不一定是按等差数列中的顺序给出 )。

## 输出格式

输出一个整数表示答案。

## 样例 #1

### 样例输入 #1

```
5
2 6 4 10 20
```

### 样例输出 #1

```
10
```

## 提示

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

对于所有评测用例,$2 \le N \le 10^5$,$0 \le A_i \le 10^9$。

蓝桥杯 2019 年省赛 B 组 H 题。

 

题解:简单题目必有坑……好吧一开始确实没有考虑到“公差为0”这一情况

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,a[N],mn=1e9; 
int main(){
    freopen("8682.in","r",stdin);
    freopen("8682.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    sort(a+1,a+n+1);
    for(int i=2;i<=n;i++)
        mn=min(mn,a[i]-a[i-1]);
    if(mn==0) cout<<n;
    else printf("%d",(a[n]-a[1])/mn+1);
    return 0;
}