1266 螞蟻
題目來源: Poj
基準時間限制:1 秒 空間限制:131072 KB 分值: 20 難度:2級算法題
n隻螞蟻以每秒1cm的速度在長為Lcm的竿子上爬行。當螞蟻爬到竿子的端點時就會掉落。由于竿子太細,兩隻螞蟻相遇時,它們不能交錯通過,隻能各自反向爬回去。對于每隻螞蟻,我們知道它距離竿子左端的距離xi,但不知道它目前的朝向。請計算各種情況當中,所有螞蟻落下竿子所需的最短時間和最長時間。
例如:竿子長10cm,3隻螞蟻位置為2 6 7,最短需要4秒(左、右、右),最長需要8秒(右、右、右)。
Input
第1行:2個整數N和L,N為螞蟻的數量,L為杆子的長度(1 <= L <= 10^9, 1 <= N <= 50000)
第2 - N + 1行:每行一個整數A[i],表示螞蟻的位置(0 < A[i] < L)
Output
輸出2個數,中間用空格分隔,分别表示最短時間和最長時間。
Input示例
3 10
2
6
7
Output示例
4 8
題解:碰撞後反向爬其實相當于擦肩而過,是以最短時間就是最靠近中間的那個點到兩端點距離的較小值,最長時間就是最靠近兩端點的點到另一邊端點的距離。
AC代碼:
1 #include<iostream>
2 #include<algorithm>
3 using namespace std;
4 int n,max1,min1,l;
5 int main()
6 {
7 cin>>n>>l;
8 min1 = 1e9+7;
9 max1 = 0;
10 for(int i =1;i<=n;i++)
11 {
12 int x;
13 cin>>x;
14 min1 = min(min1,min(abs(l/2-x),abs(x-l/2)));
15 max1 = max(max1,max(l-x,x));
16 }
17 cout<<l/2-min1<<" "<<max1<<endl;
18 return 0;
19 }