假设两个人分别从 x,y 出发,其中 x<y。显然,他们如果不在同一休息站出发,必定会相遇两次。由于他们速度一样,所以相遇后肯定会反向出发。假设他们在 a 第一次相遇,如果每个位置都有休息站的话,那么他们第二次相遇会在 L-a。事实上并不是每个位置都有休息站,但为了让时间最小,他们会在离 L-a 最近的两个休息站中的一个相遇,把这个休息站记为 b。
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10,INF=1e18;
int n,l,ans=INF;
int a[N];
signed main()
{
scanf("%lld%lld",&n,&l);
for (int i=1;i<=n;++i) scanf("%lld",&a[i]);
for (int i=1;i<=n;++i)
{
int p=lower_bound(a+1,a+n+1,l-a[i])-a;
ans=min(ans,min(p<=n?a[i]+a[p]:INF,p>1?l*2-a[i]-a[p-1]:INF));
}
printf("%lld\n",ans<<1);
return 0;
}