题目
在知乎上发现了一篇非常好的题解,特地分享一下
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
const int inf=0x3f3f3f3f;
typedef long long ll;
int n,x;
int a[maxn];
void solve()
{
cin >> n >> x;
ll ans = 0;
int maxv = 0, minv = 1e9;
for(int i = 1; i <= n; i ++ )
{
cin >> a[i];
maxv = max(maxv, a[i]);
minv = min(minv, a[i]);
}
for(int i = 1; i <= n - 1; i ++ )
ans += abs(a[i + 1] - a[i]);
ll ans1, ans2;
if(minv > 1)ans1 = min(a[1] - 1, a[n] - 1);
else ans1 = 0;
if(maxv < x) ans2 = min(x - a[n], x - a[1]);
else ans2 = 0;
for(int i = 1; i < n; i ++) {
if(minv > 1) ans1 = min(ans1,(ll)2*((min(a[i],a[i+1])-1)));
if(maxv < x) ans2 = min(ans2,(ll)2*(x-max(a[i],a[i+1])));
}
cout << ans + ans1 + ans2 << endl;
}
int main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
}