题意
在长龙街上购物时,麦可通常在路边随便找个地方停车,然后走路去店里。你可以帮麦可找个停车位,使他所走的距离最短。你可以把长龙街看作是一条直线,所有的店家及收费停车位都在这条直线(指长龙街)的整数位置上。麦可要去很多家店,但是他只想付一次的停车费。
这里有多组数据,每组数据中包含一个整数 n n n,表示你要去 n n n 家店,接下来是 n n n 个整数,每次输入 a [ i ] a[i] a[i],表示第 i i i 个店在街上的位置。
这里有 t t t 组的输入数据,每组数据有 n n n 个数字,请输出每组这 n n n 个数据中麦可最少需要走的距离。
输入格式
第一行输入表示测试用例的数量, 1 ≤ t ≤ 100 1 \le t \le 100 1≤t≤100。每个测试用例有两行,第一行给出麦可想要访问的商店数量, 1 ≤ n ≤ 20 1 \le n \le 20 1≤n≤20;第二行包含这些商店的 n n n 个整数位置, 0 ≤ a [ i ] ≤ 99 0 \le a[i] \le 99 0≤a[i]≤99。
输出格式
对于每个测试用例,输出一行表示在最佳停车位情况下麦克需要行走的最短距离。
题目分析
无论他怎么出发,都要从左端点的商店和右端点的商店走一遍并返回。
其实很简单,车停在左端点和右端点之间的中点时距离两点最短。
而麦可需要来回走一次,且是所有店家,所以由左端点和右端点中间的店家全部可以全部忽略不计,只需计算来回从一次左端点走到右端点的距离,即 ( m a x x − m i n n ) × 2 (maxx-minn)\times 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];
}
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;
}