POJ1852:Ants——梦开始的地方
http://poj.org/problem?id=1852
《挑战程序设计竞赛》的第一道oj题目,记录一下
题目大致描述是:有一群蚂蚁在一根水平木棒上,给出初始时每只蚂蚁在木棒上距离木棒左端的位置,蚂蚁可向左向右移动,当蚂蚁走到木棒的一端时会掉下木棒,求所有蚂蚁全部掉下木棒的最短时间和最长时间。
考虑最短时间,所有蚂蚁朝着距离自己较近的一端走,求出用时最多的蚂蚁的用时,即为所有蚂蚁全部掉下去的最短时间
考虑最长时间,按照题目描述,两只蚂蚁碰头之后会各自掉头向相反的方向走,但可以认为两只蚂蚁交错前进,符书中图解如下
因此,所有蚂蚁朝着距离自己较远的一端走,用时最多的蚂蚁的用时,即为所有蚂蚁全部掉下木棒的最大时间
虽然开始不太明白,但想通之后,最后的程序却是出乎意料的简答
#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;
}