这个题最小的时间很容易就想明白了,就是最中间的值,中间值左边的全部向左,右边的全部像右。
至于这个最大值,怕自己的想法有漏洞,想了很久,结果最后经过推导,就是建设蚂蚁全部向左或者全部向右,
即取a[n]和m-a[0]中的最大值。直接看代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<string>
#include<set>
#include<map>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cctype>
#include<queue>
#define LL long long
using namespace std;
const int maxn=1e6+10;
const double eps=1e-8;
const int Max=2147483647;
int m,n;
int a[maxn];
int a_min()
{
int tem=m/2;
int ans=0;
for(int i=1;i<=n;i++)
{
if(a[i]<=tem)
ans=max(ans,a[i]);
else
ans=max(ans,m-a[i]);
}
return ans;
}
int a_max()
{
return a[n]>m-a[1]?a[n]:m-a[1];
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>m>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
cout<<a_min()<<' '<<a_max()<<endl;
}
return 0;
}