本题的算法很是简单o(n),但是十分考察想象力,最短时间很容易想到是距离最近的端,但是最长距离需要进行一步转换才会发现是,距离最长的端。
#include<cstdio> #include <algorithm> using namespace std; #define MAX_N 1000000 int L,n,x[MAX_N]; void solve() { int minT=0; for(int i=0;i<n;i++) { minT=max(minT,min(x[i],L-x[i])); } int maxT=0; for(int i=0;i<n;i++) { maxT=max(maxT,max(x[i],L-x[i])); } printf("%d %d\n",minT,maxT); } int main(void) { scanf("%d %d",&L,&n); for(int i=0;i<n;i++) { scanf("%d",&x[i]); } solve(); return 0; }