一、题目描述
长为 l cm 的水平杆上共有 n 只蚂蚁,爬行方向不明。第 i 只蚂蚁离左端的距离为 p[i] 。
第一行输入单个变量 t ,为测试样例数。
每个样例的第一行有两个整数,空格分隔,l 和 n 分别为水平杆的长度和蚂蚁的数量。
接下来一行 n 个数,每两个数用空格分隔,代表 n 只蚂蚁离杆左端的距离。
每只蚂蚁的长度不计,速度全部为 1 cm / s 。如果两只蚂蚁相遇,会各自立即往反方向爬,相遇过程耗费的时间不计。要求对每个样例输出所有蚂蚁全部掉落需要的时间。
二、算法分析说明
可以把全部蚂蚁看成是一样的。两只蚂蚁相遇后瞬间往反方向继续爬,等效为两只蚂蚁相遇后仍然继续保持原方向前行。
以杆的中点为分界,如果全部蚂蚁都向离自己更近的一个端点爬,最后掉下去的蚂蚁离更近的一个端点的距离在数值上等于全部蚂蚁掉下去需要的最短时间。
如果全部蚂蚁都向离自己更远的一个端点爬,最后掉下去的蚂蚁离更远的一个端点的距离在数值上等于全部蚂蚁掉下去需要的最长时间。
样例:
2
10 3
2 6 7
214 7
11 12 7 13 176 23 191
输出:
4 8
38 207
以样例 1 为例,杆长 10 cm ,共 3 只蚂蚁,以杆的左端为原点,位置分别为 2 cm 、6 cm 、7 cm 。
三只蚂蚁的爬行方向分别为左、右、右,那么位置为 6 cm 的蚂蚁最后在右端点掉落,全过程用时 4 s 。
三只蚂蚁的爬行方向分别为右、左、左,那么位置为 2 cm 的蚂蚁最后在右端点掉落,全过程用时 8 s 。
三、AC 代码(125 ms)
#include<cstdio>
#include<algorithm>
using std