UVA11364 题解

原题传送门

题意

在长龙街上购物时,麦可通常在路边随便找个地方停车,然后走路去店里。你可以帮麦可找个停车位,使他所走的距离最短。你可以把长龙街看作是一条直线,所有的店家及收费停车位都在这条直线(指长龙街)的整数位置上。麦可要去很多家店,但是他只想付一次的停车费。

这里有多组数据,每组数据中包含一个整数 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 1t100。每个测试用例有两行,第一行给出麦可想要访问的商店数量, 1 ≤ n ≤ 20 1 \le n \le 20 1n20;第二行包含这些商店的 n n n 个整数位置, 0 ≤ a [ i ] ≤ 99 0 \le a[i] \le 99 0a[i]99

输出格式

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

题目分析

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

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

而麦可需要来回走一次,且是所有店家,所以由左端点和右端点中间的店家全部可以全部忽略不计,只需计算来回从一次左端点走到右端点的距离,即 ( m a x x − m i n n ) × 2 (maxx-minn)\times 2 (maxxminn)×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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值