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;
}