POJ 1852 Ants
题意:有n个蚂蚁以1cm/s的速度在一个长Lcm的杆子上爬行,当蚂蚁爬行到杆子的终点就会掉落,由于杆子太细,两只蚂蚁相遇时,他们不能交错通过,只能各自反向爬回去,对于每个蚂蚁我们知道它距离杆子最左端的距离Xi,但不知道他当前的朝向,计算所有蚂蚁落下杆子的最短时间和最长时间。
分析:
1.最短时间:当所有蚂蚁都朝着距离最近的那端爬,便不会相遇,所以最短时间就是这n只蚂蚁中所处位置最靠中间 的那一个爬到两端相对较短的那一端所需的时间。
2.最长时间:如果忽视蚂蚁的区别,当两个蚂蚁相遇时互相穿过,也就是说对于每个蚂蚁的最长时间为max(s[i],L-s[i])。
代码:
#include "iostream"
#include "cstdio"
#include "algorithm"
#include "cmath"
using namespace std;
const int M = 1e6+10;
int t,n,L,s[M];
int Min , Max , Marki ;
void solve(){
Min = Max = -M;
for(int i=0;i<n;i++){
Min = max(Min,min(s[i],L-s[i]));
Max = max(Max,max(s[i],L-s[i]));
}
}
int main(){
scanf("%d",&t);
while (t--) {
scanf("%d%d",&L,&n);
for(int i=0;i<n;i++) scanf("%d", s+i);
solve();
printf("%d %d
",Min,Max);
}
return 0;
}