#include<stdio.h>
int main()
{
int n,length,number,max,min,i,l,l1,t;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&length,&number);
min=0;
max=0;
for(i=0;i<number;i++)
{
scanf("%d",&l);
l1=length-l;
if(l1<l)
{
t=l1;l1=l;l=t;
}
if(min<l)min=l;
if(l1>max)max=l1;
}
printf("%d %d\n",min,max);
}
return 0;
}
题目要点:
杆长一定,各只蚂蚁初始方向任意,蚂蚁速度均相同,到达杆边即坠落,两只蚂蚁
相遇立刻反相继续移动。
引理:
由于蚂蚁的速度都相同,且相遇之后马上反相继续移动,所以从开始到一特定时刻
所有蚂蚁的已行路程是相同的(除已经掉下横杆的)。
定理:
当任意两只蚂蚁相遇时,各自反相继续运动,相当于各自继续向前移动,但两者交
换各自已已行路程,由引理可知,在两只蚂蚁相遇这一时刻,两者已行路程是相等的,
由此得证,两只蚂蚁相遇后,各自继续向前与各自反相最终所行路程相等。(横杆宽度
不够等因素没有意义,所以忽略)。
回到题目,设杆长L,某只蚂蚁位置X,由于相遇不影响结果,求最长时间只需考虑那只可
以离边界最大值最大的蚂蚁,求最短时间只需考虑那只离边界最小值最大的蚂蚁,所以
最长时间为Max(n只蚂蚁的Max(X,L-X)),最短时间为Max(n只蚂蚁的Min(X,L-X))。