前提要所有士兵离开才行
minn=max(minn,ab)H
by popo0815 @ 2023-09-05 12:26:13
另外,a[50000]可能越界
by popo0815 @ 2023-09-05 12:27:37
贪心的思想(?),但是贪心方法不对.
试一下:先sort(读入序列不保证有序),MAX就是max(l-a[1]+1,a[n]);
MIN比较复杂,找到离l/2较近的数(2个,一个>l,一个<l)取其max的min。
by wzhm54nr @ 2023-09-05 12:46:12
```cpp
#include <bits/stdc++.h>
using namespace std;
int a[5005];
int l, n;
int main(){
cin >> l >> n;
if(n==0){//一定要特判!否则第一个点都过不了
cout<<"0 0";
return 0;
}
for(int i=1;i<=n;i++) std::cin >> a[i];
sort(a+1,a+1+n);
int index=lower_bound(a+1,a+1+n,l/2)-a;
if(index==n+1){ //判边界
std::cout << a[n] << " ";
}
else if(index==1){
std::cout << l-a[1]+1 << " ";
}
else if(a[index]==l/2){ //中间的人正好在桥中
std::cout << a[index] << " ";
}
else{//左边的往左,右边的往右,取max
std::cout << max(l-a[index]+1,a[index-1]) << " ";
}
std::cout << max(l-a[1]+1,a[n]) << std::endl;//类似于南辕北辙qwq
return 0;
}
```
by wzhm54nr @ 2023-09-05 13:08:57
AC了,你试下
by wzhm54nr @ 2023-09-05 13:09:50
@[wzhm54nr](/user/1071328) 谢谢
by maxlmb2023_ti @ 2023-09-07 16:56:46