题意:
n只蚂蚁在直杆上行走,杆末端掉下。已知杆长和行进速度和蚂蚁初始位置,未知蚂蚁朝向。蚂蚁相遇则相互掉头,求最后一只蚂蚁掉下杆的最小最大可能时间。
题解:最需要理解的就是相遇时候,是一种角色互换
可以理解为:相遇时,蚂蚁走了与之相遇的蚂蚁的本应该走的路。
所以最短时间是最靠近中点的蚂蚁,行走到离较近杆末端的时间
最长时间是最靠近边缘的蚂蚁,行走到离较远杆末端的时间
#include<iostream>
#include<stdio.h>
using namespace std;
void solve(int str[],int n,int L){
int minT = 0;
for(int i = 0; i<n; i++){
minT = max(minT, min(str[i],L - str[i]));
}
int maxT = 0;
for(int i = 0; i<n; i++){
maxT = max(maxT,max(str[i],L - str[i]));
}
printf("%d %d\n", minT, maxT);
}
int main(){
int n;
scanf("%d",&n);
while(n--){
int pole_length;
scanf("%d",&pole_length);
//cin>>pole_length;
int x_length;
scanf("%d",&x_length);
//cin>>x_length;
int x[x_length];
for(int i = 0; i < x_length; i++){
scanf("%d",&x[i]);
//cin>>x[i];
}
solve(x,x_length,pole_length);
}
}