题目描述 【 点这里 】
思路
①对于最小值,很容易想到每个人都往最近的一遍走,一定最优,且不会想撞
②对于最大值,如果忽略人的区别,则可发现与是否相撞无关(可看做穿过去了)
故最大值为 max(L-A(min)+1,A(max))
[L-A(min)+1 -->最左到最右 A(max) -->最右到最左]
③应对L=0,n=0的情况进行特判(否则#1WA)
L-A(min)+1 是会计算出 1
Code
#include<bits/stdc++.h>
using namespace std;
int n,l,mi,ma,a[5005];
int main()
{
scanf("%d%d",&l,&n);
if(n==0) { cout<<"0 0"; return 0; }
for(int i=1;i<=n;i++) scanf("%d",a+i),mi=max(mi,min(a[i],l-a[i]+1));
sort(a+1,a+1+n); ma=max(l-a[1]+1,a[n]);
cout<<mi<<" "<<ma;
return 0;
}