POJ1852:Ants——梦开始的地方

http://poj.org/problem?id=1852

《挑战程序设计竞赛》的第一道oj题目,记录一下

题目大致描述是:有一群蚂蚁在一根水平木棒上,给出初始时每只蚂蚁在木棒上距离木棒左端的位置,蚂蚁可向左向右移动,当蚂蚁走到木棒的一端时会掉下木棒,求所有蚂蚁全部掉下木棒的最短时间和最长时间。

考虑最短时间,所有蚂蚁朝着距离自己较近的一端走,求出用时最多的蚂蚁的用时,即为所有蚂蚁全部掉下去的最短时间

考虑最长时间,按照题目描述,两只蚂蚁碰头之后会各自掉头向相反的方向走,但可以认为两只蚂蚁交错前进,符书中图解如下

image-20220128163754231

因此,所有蚂蚁朝着距离自己较远的一端走,用时最多的蚂蚁的用时,即为所有蚂蚁全部掉下木棒的最大时间

虽然开始不太明白,但想通之后,最后的程序却是出乎意料的简答

#include<iostream>
#include<vector>
using namespace std;

//每只蚂蚁的位置
vector<int> pos;

int main(){
    int k, l, n;
    scanf("%d", &k);
    while(k--){
        pos.clear();    //注意每个case都要clear一下pos
        scanf("%d%d", &l ,&n);
        for(int i = 0; i < n; ++i){
            int p;
            scanf("%d", &p);
            pos.push_back(p);
        }

        //最短时间
        int minT = 0;
        for(int i = 0; i < n; ++i){
            minT = max(minT, min(pos[i], l - pos[i]));
        }

        //最长时间
        int maxT = 0;
        for(int i = 0; i < n; ++i){
            maxT = max(maxT, max(pos[i], l - pos[i]));
        }
        printf("%d %d\n", minT, maxT);
    }

    system("pause");
    return 0;
}
posted @ 2022-01-28 16:42  dctwan  阅读(43)  评论(0编辑  收藏  举报