POJ1852(Ants)

两只蚂蚁相向而行,遇到后各自掉头,其实等价于两只蚂蚁遇到后穿过对方一直往前走,所花的时间是一样的。

利用这一点即可求得最长耗时,将题目改为蚂蚁可以互相穿过,只需要用离端点最远的那只蚂蚁来计算。

最短耗时的情况则为蚂蚁都选取最近的端点走过去,这时候不会相遇。

#include <cstdio>
#include <iostream>
#include <queue>
using namespace std;
const int maxx=1000000000;
int main()
{
	int T;
	scanf("%d",&T);
	while (T--)
	{
		int m,n;
		scanf("%d%d",&m,&n);
		int i;
		int mid=m/2;
		int maxn=0,minn=maxx;
		int minleft=0,minright=maxx;
		for (i=0;i<=n-1;i++)
		{
			int a;
			scanf("%d",&a);
			if (a<=mid && a>minleft)
				minleft=a;
			else if (a>mid && a<minright)
				minright=a;
			if (a>maxn)
				maxn=a;
			if (a<minn)
				minn=a;
		}
		int ans1;
		int ans2;
		if (minleft>m-minright)
			ans1=minleft;
		else
			ans1=m-minright;
		if (m-minn>maxn)
			ans2=m-minn;
		else
			ans2=maxn;
		printf("%d %d\n",ans1,ans2);
	}
	return 0;
}


你可能感兴趣的:(POJ1852(Ants))