简单易懂的理解
聚会
http://www.nowcoder.com/questionTerminal/1c329f17c65f4f3c858300e775887db9
我们知道这扇门的一部分一定是在原点,另外一部分是在某一边,所以倘若0两测都有人的话,我们必定只要能减少某一遍到达原点的最长时间,因为不可能另外一边的都走到原点了还接着走过去找那边门。那么我们如何判定门是建立在哪一边的呢,我们只要确定哪一边绝对值更大,就建立在哪一边。
确立了建立在哪一测后,我们只要逐个枚举这一侧元素到
0 a1 a2 a3
当考虑在a2,a3之间时候,最大时间为max(a3-mid,max(x[i-1],mid-x[i]))
#include<bits/stdc++.h> using namespace std; int a[100100]; int main() { int t; cin>>t; while(t--){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); if(-a[1]>a[n]){ for(int i=1;i<=n;i++) a[i]=-a[i]; sort(a+1,a+n+1); } int ans=1e9; for(int i=1;i<=n;i++){ if(a[i]<=0) continue; int x=max(a[i-1],0); int y=a[i]+a[n]>>1; int y=max(max(y-a[i],a[n]-y),x) ans=min(ans,y); } ans=max(ans,-a[1]); cout<<ans<<endl; } return 0; }