POJ 1852 Ants

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\n",Min,Max);
  }
  return 0;
}
posted @ 2017-03-11 19:42  ojnQ  阅读(251)  评论(0编辑  收藏  举报