#include<iostream> #include<cstdio> using namespace std; #define Max(a,b) a>b?a:b; int main() { int T,m,n,a,b,k; scanf("%d",&T); // T是几组例子 测试case m是长度,n是几只蚂蚁 a,b是辅助变量,最后的输出结果 while(T--) { scanf("%d%d",&m,&n); for(a=b=0;n--;) { scanf("%d",&k); k=Max(m-k,k); //距离最长的一边 b=Max(b,k); //最长的距离所需要的时间也最大,不断递归 a=Max(a,m-k); //m-k是距离最短的一边 ,不断递归 即最短距离的最大者 } printf("%d %d\n",a,b); } return 0; } //例如,长度为10,一只在距离左端2的位置,一只在距离左端6的位置,则最短时间为max(min(2,10-2),min(6,10-6))为4,最长时间为max((max(2,10-2),max(6,10-6)))为8其实就是两只相向而行 //则需要时间最长的的就是让距离端点最近的蚂蚁爬到另一个端点(最远)所需要的时间。 //也就是说,只要找出所有蚂蚁与较远端比较,然后找出最大值就是所需要的最大时间 //在距离短的一边中求出最大的一边。就能找到距离端点最远的蚂蚁需要爬到端点的时间 </cstdio></iostream>