https://vjudge.net/problem/POJ-1852
最短时间显然是各自往靠近端点的地方走。
最长时间关键是要想到,折返和擦肩其实是一样的,可以当成两只蚂蚁换了个位子,最终求max是一样的。
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define INF 0x3f3f3f3f
typedef unsigned long long ll;
using namespace std;
int main()
{
int t, n, a, m;
scanf("%d", &t);
while(t--){
scanf("%d%d", &n, &m);
int tmp1, tmp2, mini=-INF, maxm=-INF;
for(int i = ; i < m; i++){
scanf("%d", &a);
tmp1 = min(a, n-a);//取每只蚂蚁掉下去的最短时间
mini = max(mini, tmp1); tmp2 = max(a, n-a);
maxm = max(maxm, tmp2);//取每只蚂蚁掉下去的最长时间
}
printf("%d %d\n", mini, maxm);
}
return ;
}