题意简述
数轴上有 个点,一开始在 位置上,需要去 个点(顺序从 号点按顺序走完 个点),最后回到 位置。
对于 分别输出不需要去 号点的最小路程。
思路
又是一道水题。。。
首先,我们考虑不走 原路径会发生什么变化,
显然,会变为
他和原本的路径的区别是:减去了 和 的距离,加上了 的距离。
知道了这一点,那就很好做了,只需要先算出全部都走的时间,然后如上计算便可得到。
注: 两点的距离为 , 小心 。
代码
#include <bits/stdc++.h>
using namespace std;
#define I_Love_lxl_Forever cout
int N , Num[100010];
int Sum_Dist;
int main() {
ios::sync_with_stdio(false);
cin >> N;
for(int i = 1; i <= N; i++) {
cin >> Num[i];
}
for(int i = 1; i <= N + 1; i++) {
Sum_Dist += abs(Num[i] - Num[i - 1]);
}
for(int i = 1; i <= N; i++) {
cout << Sum_Dist - abs(Num[i] - Num[i - 1]) - abs(Num[i] - Num[i + 1]) + abs(Num[i - 1] -Num[i + 1]) <<endl;
}
return 0;
}