POJ 1852

作者: vanadia | 来源:发表于2016-08-30 21:12 被阅读0次

    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;
    }
    

    相关文章

      网友评论

          本文标题:POJ 1852

          本文链接:https://www.haomeiwen.com/subject/ybhqettx.html