WY59. 数轴
描述
牛牛非常喜欢和朋友们一起玩。输入描述
输入包括两行,第一行两个正整数n和s(2 ≤ n ≤ 50, 0 ≤ s ≤ 10^8),表示朋友的个数和移动的距离。 第二行包括n个正整数x[i](-10^8 ≤ x[i] ≤ 10^8),表示初始时每个朋友所在的坐标位置。输出描述
输出一个正整数,表示移动之后最左边的朋友和最右边的朋友最小距离为多少。示例1
输入:
3 5 4 -7 7
输出:
4
C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2019-08-08
#include<stdio.h> #include<stdlib.h> #define MAX(a, b) (((a)>(b))?(a):(b)) #define MIN(a, b) (((a)<(b))?(a):(b)) const int N = 51; int cmpfunc (const void * a, const void * b){ return ( *(int*)a - *(int*)b ); } int main(){ int n=0; long s=0; scanf("%d%ld", &n, &s); long arr[N] = {0}; for(int i=0; i<n; ++i){ scanf("%ld", &arr[i]); } qsort(&arr[0], n, sizeof(long), cmpfunc); long dist = arr[n-1] - arr[0]; for(int right, left, i=0; i<n-1; ++i){ left = MIN(arr[0]+s, arr[i+1]-s); right = MAX(arr[i]+s, arr[n-1]-s); dist = MIN(dist, right-left); } printf("%ld\n", dist); return 0; }
C++14 解法, 执行用时: 2ms, 内存消耗: 384KB, 提交时间: 2019-08-17
#include<cstdio> #include<algorithm> #include<climits> using namespace std; const int N = 55; int x[N]; int main() { //freopen("resources\\input.txt", "r", stdin); int n, s; scanf("%d%d", &n, &s); for (int i = 1; i <= n; ++i) scanf("%d", &(x[i])); sort(x + 1, x + n + 1); int range = x[n] - x[1]; for (int i = 1; i < n; ++i) { int min = INT_MAX; int max = INT_MIN; for (int j = 1; j <= i; ++j) { min = (x[j] + s < min) ? x[j] + s : min; max = (x[j] + s > max) ? x[j] + s : max; } for (int k = i + 1; k <= n; ++k) { max = (x[k] - s > max) ? x[k] - s : max; min = (x[k] - s < min) ? x[k] - s : min; } range = (max - min < range) ? max - min : range; } printf("%d", range); return 0; }