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