列表

详情


NC21545. 牛牛的朋友

描述

牛牛有一群牛友,每只小牛都站在坐标轴上的某个位置,这群牛友很听牛牛的话,每当牛牛做个手势,每只小牛都会移动恰好X个单位的距离,要么向左,要么向右

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

输入描述

第一行输入一个整数n (1 ≤ n  ≤ 50),表示牛的数量
第二行输入n个数pi (-1e8 ≤ pi ≤ 1e8),表示每只牛的位置
第三行输入一个整数X (0 ≤ X ≤ 1e8)

输出描述

输出一个整数

示例1

输入:

3
-3 0 1
3

输出:

3

说明:

示例2

输入:

3
4 7 -7
5

输出:

4

说明:

示例3

输入:

2
-100000000 100000000
100000000

输出:

0

示例4

输入:

9
3 7 4 6 -10 7 10 9 -5
7

输出:

7

示例5

输入:

4
-4 0 4 0
4

输出:

4

示例6

输入:

1
7
0

输出:

0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 4ms, 内存消耗: 472K, 提交时间: 2022-07-10 15:53:39

#include<bits/stdc++.h>
using namespace std;
int n,a[51],x;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	 cin>>a[i];
	cin>>x;
	sort(a+1,a+n+1);
	int m=a[n]-a[1];
	for(int i=1;i<n;i++)
	 m=min(m,(max(a[n]-x,a[i]+x)-min(a[1]+x,a[i+1]-x)));
	cout<<m;
	return 0;
}

Python3(3.9) 解法, 执行用时: 25ms, 内存消耗: 2972K, 提交时间: 2020-12-17 17:33:28

n=int(input())
p=list(map(int,input().split()))
x=int(input())
p.sort()
left,right=p[0],p[n-1]
ans=right-left
for i in range(n-1):
    left=min(p[0]+x,p[i+1]-x)
    right=max(p[n-1]-x,p[i]+x)
    ans=min(ans,right-left)
print(ans)

上一题