题意:点击打开链接
题意:
n只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,我们知道它距离竿子左端的距离xi,但不知道它当前的朝向。请计算各种情况当中,所有蚂蚁落下竿子所需的最短时间和最长时间。
题解:
因为蚂蚁不能互相交错,只能各自爬回去,但是每只蚂蚁的距离又是不计的。那么我们就可以理解成,不是互相掉头了,而是互相穿过去了。那么问题就变得简单了。
只需要求离边沿最远的蚂蚁的最近距离,和蚂蚁最远的离边沿距离即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
const long long mod = 1000000009;
const int maxn = 50000+5;
int a[maxn];
int abs(int x){
return x >= 0 ? x : -x;
}
int main(){
int n,l;
scanf("%d%d",&n,&l);
for(int i = 0 ;i < n ; i ++){
scanf("%d",&a[i]);
}
int Maxx = -1,Minn = -1;
for(int i = 0 ; i < n ; i ++){
int temp = abs(l-a[i]);
int maxx = max(temp,a[i]);
int minn = min(temp,a[i]);
Maxx = max(Maxx,maxx);
Minn = max(Minn,minn);
}
cout << Minn << " " << Maxx << endl;
}