初看起来还懵了一下,其实就以一个等效思想在里面,两只蚂蚁碰头并向相反的方向运动,其实就等效于蚂蚁之间“穿越”了,所以就相当于n只蚂蚁在n根木棍上独立的运动,问题一下子就很简单了............不明白为什么不支持abs(int)在这个函数,我只好重写了一个。
用cin和cout还会超时.....真受不了~~
#include<iostream>
#include<stdio.h>
using namespace std;
int ABS(int num);
const int INF=9999999;
int main(){
int t,tmp,Max,Min,Middle,Min_abs,Len,n,Short,Long;
scanf("%d",&t);
for(int i=0;i<t;i++){
scanf("%d%d",&Len,&n);
Min_abs=INF; Min=INF; Max=-1;
for(int j=0;j<n;j++){
scanf("%d",&tmp);
if(ABS(tmp-Len/2)<Min_abs){
Min_abs=ABS(tmp-Len/2);
Middle=tmp;
}
if(tmp>Max)
Max=tmp;
if(tmp<Min)
Min=tmp;
}
if(Len-Middle<Middle)
Short=Len-Middle;
else
Short=Middle;
if(Max>Len-Min)
Long=Max;
else
Long=Len-Min;
printf("%d %d\n",Short,Long);
}
system("pause");
return 0;
}
int ABS(int num){
if(num<0)
return -num;
return num;
}
用cin和cout还会超时.....真受不了~~