arc 093 C – Traveling Plan

题意:

给出横坐标上一系列的点,一个人从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 }
原文地址:https://www.cnblogs.com/kickit/p/8809560.html