大意:给你一段水平的距离,以及蚂蚁相对于最左边的距离,蚂蚁行走的方向不确定,一旦所有的蚂蚁都走出了这一段水平距离的话,让你求出可能的最小与最大时间。
思路:最小时间非常好求,主要的问题是求最大的时间,我们可以将问题转换为等价问题,即蚂蚁碰到之后然后反方向行走相当于一直前进,这个问题可以手写模拟一遍,发现行走的距离总是相等的。
问题衍生一下,如果有的蚂蚁的速度是1cm/s,而有的蚂蚁是2cm/s呢?那怎么去求?我想这个问题应该按照dis/v来比较大小了吧。
CODE:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int T;
scanf("%d%*c", &T);
while(T--)
{
int n, len;
int minl = -1, maxl = -1;
scanf("%d%d", &len, &n);
for(int i = 0; i < n; i++)
{
int dis;
scanf("%d", &dis);
minl = max(minl, min(dis, len-dis));
maxl = max(maxl, max(dis, len-dis));
}
printf("%d %d\n",minl, maxl);
}
return 0;
}
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int T;
scanf("%d%*c", &T);
while(T--)
{
int n, len;
int minl = -1, maxl = -1;
scanf("%d%d", &len, &n);
for(int i = 0; i < n; i++)
{
int dis;
scanf("%d", &dis);
minl = max(minl, min(dis, len-dis));
maxl = max(maxl, max(dis, len-dis));
}
printf("%d %d\n",minl, maxl);
}
return 0;
}