http://poj.org/problem?id=1852
这个题一开始我想多了。。。
其实这个题想通了就很简单,没想通就难了。。
因为蚂蚁都是一样的。所以,最短时间就是离木棒最中间的那个蚂蚁向最近的边缘移动就是结果。
最远的那个题目说两只蚂蚁相碰时反向移动,其实不用管它是否掉头,直接看成没有掉头就行了,所以这个结果即为在木棒最边缘处的蚂蚁向另外一个方向走的时间即为结果。
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int a, int b)
{
return a<b;
}
int a[1000010];
int main()
{
int t,n,m,i,x,ma,mi;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
x = 9999999;
ma = 0;
for(i = 0; i < n; i++)
{
scanf("%d",&a[i]);
if(a[i] >= m/2 && a[i]-(m/2) < x)
{
x = a[i]-(m/2);
mi = m-a[i];
}
if(a[i] < m/2 && (m/2)-a[i] < x)
{
x = (m/2)-a[i];
mi = a[i];
}
}
sort(a,a+n,cmp);
if(a[0] > (m-a[n-1]))
{
ma = a[n-1];
}
else
{
ma = m-a[0];
}
printf("%d %d\n",mi,ma);
}
return 0;
}