Description

LLL有⼀群猫友,每只⼩猫都站在坐标轴上的某个位置,这群猫友很听LLL的话,每当LLL做个⼿势,每只⼩猫

都会移动恰好X个单位的距离,要么向左,要么向右

现在告诉你每只⼩猫在移动前的位置,求移动之后最左边的猫与最右边的猫的最⼩距离

Input

 多组测试数据 对于每组数据,第⼀⾏输⼊⼀个整数n (1<=n<=50 ),表⽰猫的数量 第⼆⾏输⼊n个数pi (-1e8<=pi<=1e8),表⽰每只猫的位置 第三⾏输⼊⼀个整数 X(0<=X<=1e8 )

Output

 对于每组数据输出⼀个整数

Sample Input

3
-3 0 1
3
3
4 7 -7
5
2
-100000000 100000000
100000000
9
3 7 4 6 -10 7 10 9 -5
7
4
-4 0 4 0
4
1
7
0

Sample Output

3
4
0
7
4
0

HINT

 

 

题解:

 

#ifndef debuging 
#define FIN  ; 
#define FOUT ; 
#define OUT(x)  ; 
#define ERR(x)  ; 
#endif 
#include <cstdio> 
#include <iostream> 
#include <cstring> 
#include <algorithm> 
#include <cmath> 
#include <vector> 
#include <map> 
#include <set> 
#include <queue> 
using namespace std ; 

long long a[100]; 

class TaroFriends 
{ 
    public: 
        int getNumber(vector <int> coordinates, int X) 
        { 
            sort(coordinates.begin(),coordinates.end()); 
            int n = coordinates.size(); 
            long long ans = coordinates[n-1] - coordinates[0]; 
            for(int i = 0;i < n-1;i++) 
            { 
                for(int j = 0;j <= i;j++) 
                    a[j] = coordinates[j] + X; 
                for(int j = i+1;j < n;j++) 
                    a[j] = coordinates[j] - X; 
                sort(a,a+n); 
                ans = min(ans, a[n-1] - a[0] ); 

            } 
            return (int)ans;  

        } 
}; 


int main () {
    int n;
    while (cin >> n) {
        vector <int> a(n);
        for (int i = 0; i < n; i++) {
            cin >> a[i];
        }
        int d; 
        cin >> d;
        TaroFriends test;
        cout << test.getNumber(a, d) << endl;
    }
    return 0;
}