您的位置:首页 > 其它

poj1852 蚂蚁

2013-10-11 22:17 162 查看
#include
#include
using namespace std;
#define Max(a,b) a>b?a:b;
int main()
{
    int T,m,n,a,b,k;
    scanf("%d",&T); // T是几组例子 测试case  m是长度,n是几只蚂蚁 a,b是辅助变量,最后的输出结果
    while(T--)
    {
        scanf("%d%d",&m,&n);
        for(a=b=0;n--;)
        {
            scanf("%d",&k);
            k=Max(m-k,k);    //距离最长的一边 
            b=Max(b,k);        //最长的距离所需要的时间也最大,不断递归
            a=Max(a,m-k);    //m-k是距离最短的一边 ,不断递归 即最短距离的最大者
        }
        printf("%d %d\n",a,b);
    }
    return 0;
}
//例如,长度为10,一只在距离左端2的位置,一只在距离左端6的位置,则最短时间为max(min(2,10-2),min(6,10-6))为4,最长时间为max((max(2,10-2),max(6,10-6)))为8其实就是两只相向而行
//则需要时间最长的的就是让距离端点最近的蚂蚁爬到另一个端点(最远)所需要的时间。
//也就是说,只要找出所有蚂蚁与较远端比较,然后找出最大值就是所需要的最大时间
//在距离短的一边中求出最大的一边。就能找到距离端点最远的蚂蚁需要爬到端点的时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: