题目描述
n只蚂蚁以每秒1厘米的速度在长为L厘米的水平放置的竹竿上爬行。当蚂蚁爬到竹竿的任意一个端点时就会掉落。对于每只蚂蚁,我们知道开始时它距离竹竿左端的距离为ai。
请计算所有蚂蚁都掉落下竹竿时所需的最短时间。
输入
第一行,n,蚂蚁的数量。
第二行,L,竹竿的长度。
第三行,n只蚂蚁距离竹竿左端点的距离。
输出
输出共一行,包含一个正整数,表示所有蚂蚁都掉下竹竿所需的最短时间。
样例输入 Copy
3 10 2 6 7
样例输出 Copy
4
提示
3只蚂蚁都爬下竹竿最快的方法是:第1只蚂蚁往左爬下竹竿需要2秒;第2只蚂蚁往右爬下竹竿需要4秒;第3只蚂蚁往右爬下竹竿需要3秒。所以3只蚂蚁全都爬下竹竿所需的最短时间是4秒。
【数据范围】
对于50%的数据:1<=L<=10000;1<=n<=1000;0<=ai<=L;
对于100%的数据:1<=L<=1000000000;1<=n<=1000000;0<=ai<=L。
代码如下
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define N 10000000
long long n;
long long L;
long long ai[N];
int main()
{
cin >> n >> L;
for (long long i = 0; i < n; i++)
{
cin >> ai[i];
}
sort(ai, ai + n);
long long max = 0;
//算最短时间
for (long long i = 0; i < n; i++)
{
// 离右端最远
if (L - abs(ai[i]) > max )
{
max = L - abs(ai[i]);
}
// 离左端最远
if (ai[i] - 0 < max)
{
max = ai[i];
}
}
cout << max;
}