ARC120E 1D Party
找到最优策略:要么先向左遇到第一个人之后向右,要么先向右遇到第一个人之后向左(每个
然后其实这个可以 直接转化为每个人一直向右或者向左,因为两个人相遇之后分别转向可以看作是互换了身份之后不转向继续走
然后盗个图,会发现整个局面变成了这样:
一种颜色就是一个人
然后结合图形可以写出一个
注意到这时候
相应的这里要注意需要
考虑证明如下性质:
若
i 向右走,i+1 向左走,则称i 是神奇的(?)。在最优策略中,不会出现i 使得i,i+1,i+2 都不神奇。
当
这说明不会出现
#include <bits/stdc++.h>
using namespace std;
const int N = 200003;
int n,a[N],f[N];
main(){
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",a+i);
for(int i=2;i<=n;++i){
f[i]=a[i]-a[1]>>1;
for(int j=max(i-4,2);j<i-(i!=n);++j)
f[i]=min(f[i],max(f[j],a[i]-a[j-1]>>1));
}
printf("%d",f[n]);
}