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

 

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

 

问题衍生一下,如果有的蚂蚁的速度是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;
}

 

 

posted on 2012-10-17 10:21  有间博客  阅读(137)  评论(0编辑  收藏  举报