题意:
给出横坐标上一系列的点,一个人从0出发按照下标顺序访问每一个点,再回到0点。
问每次如果去掉一个点,那么访问的距离变为多少。
思路:
去掉这个点,那么就减去这个点到上一点到这一点的距离,减去这个点到下一个点的距离,加上上一个点到下一个点的距离。。。。
代码:
1 #include <stdio.h> 2 #include <map> 3 using namespace std; 4 5 const int N = 1e5 + 5; 6 7 int a[N]; 8 int b[N]; 9 10 map<int,int> mmp; 11 12 int mabs(int x) 13 { 14 return x >= 0 ? x : -x; 15 } 16 17 int main() 18 { 19 int n; 20 21 scanf("%d",&n); 22 23 for (int i = 1;i <= n;i++) 24 { 25 scanf("%d",&a[i]); 26 27 mmp[a[i]]++; 28 } 29 30 int ans = 0; 31 32 for (int i = 1;i <= n+1;i++) 33 { 34 ans += mabs(a[i] - a[i-1]); 35 } 36 37 for (int i = 1;i <= n;i++) 38 { 39 int tmp = ans - mabs(a[i-1] - a[i]) - mabs(a[i] - a[i+1]) + mabs(a[i+1] - a[i-1]); 40 41 printf("%d ",tmp); 42 } 43 44 return 0; 45 }