UVA 10714 Ants

 

大意:给你一段水平的距离,以及蚂蚁相对于最左边的距离,蚂蚁行走的方向不确定,一旦所有的蚂蚁都走出了这一段水平距离的话,让你求出可能的最小与最大时间。

 

思路:最小时间非常好求,主要的问题是求最大的时间,我们可以将问题转换为等价问题,即蚂蚁碰到之后然后反方向行走相当于一直前进,这个问题可以手写模拟一遍,发现行走的距离总是相等的。

 

问题衍生一下,如果有的蚂蚁的速度是1cm/s,而有的蚂蚁是2cm/s呢?那怎么去求?我想这个问题应该按照dis/v来比较大小了吧。

 

CODE:

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <algorithm>
using  namespace std;

int main()
{
     int T;
    scanf( " %d%*c ", &T);
     while(T--)
    {
         int n, len;
         int minl = - 1, maxl = - 1;
        scanf( " %d%d ", &len, &n);
         for( int i =  0; i < n; i++)
        {
             int dis;
            scanf( " %d ", &dis);
            minl = max(minl, min(dis, len-dis));
            maxl = max(maxl, max(dis, len-dis));
        }
        printf( " %d %d\n ",minl, maxl);
    }
     return  0;
}

 

 

你可能感兴趣的:(ant)