【洛谷 8682】[蓝桥杯 2019 省 B] 等差数列
# [蓝桥杯 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; }