POJ 1852

2016-08-30  本文已影响0人  vanadia

POJ 1852

题意:

给出一定数量的蚂蚁在一只管子里爬动 速度为1,爬动方向未知,蚂蚁碰头之后掉转方向,在爬到端头后掉下去。输入管子的长度,蚂蚁的数量,每只蚂蚁离左端的距离。求出所有蚂蚁全部爬出管子可能的最大时间,最小时间。

思路:

之前没有一点思路,上网查了之后,理解到蚂蚁碰头之后掉转方向可以视为直接穿过对方,因为每只蚂蚁都是没有区别的。

所以利用贪心的思想,只要求出每只蚂蚁爬出的最小时间,然后再比较找出最小时间的最大值就是所有蚂蚁爬出的最小时间。同理,最大时间就是求出每只蚂蚁爬出的最大时间,比较找出最大时间的最大值。

#include <iostream>
#include <stdio.h>
#include <cmath>
#include <algorithm>
using namespace std;

int t,num,len,maxN,minN;
int a[100001];
int main(int argc, char const *argv[])
{
    cin>>t;
    while(t--){
        memset(a,0,sizeof(a));
        maxN = minN = 0;
        cin>>len>>num;
        for(int i = 0;i<num;i++){
            cin>>a[i];  
        }
        for(int j = 0;j<num;j++){
            minN = max(minN,min(a[j],len - a[j]));
        }
        for(int j = 0;j<num;j++){
            maxN = max(maxN,max(a[j],len - a[j]));
        }

        cout<<minN<<" "<<maxN<<" "<<endl;

    }
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读