题解求调
  • 板块UVA11364 Parking
  • 楼主cqbzrjx
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/2/25 11:43
  • 上次更新2024/2/25 15:04:35
查看原帖
题解求调
964148
cqbzrjx楼主2024/2/25 11:43

UVA11364 Parking 题解

原题地址Link

题意

在长龙街上购物时,麦可通常在路边随便找个地方停车,然后走路去店里。你可以帮麦可找个停车位,好让他所走的距离最短吗? 长龙街是一条直线,所有的店家及收费停车位都在直线的整数字位置上。麦可要去很多家店,但是只想付一次的停车费。请输出每组数据只不过输出麦克最少需要走的距离。

输入

第一行输入表示测试用例的数量,1≤t≤1001 \le t \le 100。每个测试用例有两行。第一行给出麦可想要访问的商店数量,1≤n≤201 \le n \le 20;第二行包含这些商店的nn个整数位置,0≤a[i]≤990 \le a[i] \le 99。

输出

对于每个测试用例,输出一行,表示在最佳停车位情况下麦克需要行走的最短距离。

样例输入

2
4
24 13 89 37
6
7 30 41 14 39 42

样例输出

152
70

题目分析

无论他怎么出发,都要从左端点的商店和右端点的商店走一遍并返回。

其实很简单,车停在左端点和右端点之间时距离两点最短。

而你需要来回走一次,且是所有店家,所以由左端点和右端点中间的店家全部可以全部忽略不计,只需计算来回从一次左端点走到右端点的距离,即(maxx−minn)∗2(maxx - minn) * 2。

Code

#include <bits/stdc++.h> //万能头,养成好习惯
using namespace std;
int t,n,a[105];//t为组数,n为商店数量,a为n个商店的整数位置
int main()
{
	cin>>t;//输入组数
	while(t--)//组数遍历
	{
		cin>>n;//输入商店数量
		for(int i = 1;i <= n;i++)
		{
			cin>>a[i]; //输入n个商店的整数位置
		}
		int minn = INT_MAX,maxx = INT_MIN;//注意,每次左端点和右端点要初始化
		for(int i = 1;i <= n;i++)//循环遍历
		{
			minn = min(minn,a[i]);//枚举判断左端点
			maxx = max(maxx,a[i]);//枚举判断右端点
		}
		cout<<(maxx - minn) * 2<<endl;//输出距离,注意要换行
	}
	return 0;//华丽结束
}
2024/2/25 11:43
加载中...