当前位置:首页 > 题解目录 > 正文内容

【题解】最短距离

亿万年的星光10个月前 (04-18)题解目录845

【题目描述】

在一条一维的直线上,存在着 n 台显示器和 n 个电源插座。老师给小蓝布置了个任务:负责将每台显示器通过电源线与一个插座相连接(每个插座最多只能给一台显示器供电);同时,老师希望所消耗的电源线的长度尽可能的少,请你帮小蓝计算下电源线的最小消耗长度为多少?

为了便于计算,你只需要考虑直线距离即可。

【输入描述】

输入的第一行包含一个正整数 n。

接下来 n 行,每行包含一个整数 xi,依次表示每台显示器的坐标。

接下来 n 行,每行包含一个整数 yi,依次表示每个插座的坐标。

【输出描述】

输出一行包含一个整数表示答案。

【样例输入】

2
0
1
2
3

【样例输出】

4

【数据约定】

对于20%的数据,1<=n<=10,  0<=Xi,Yi<=100

对于40%的数据,1<=n<=100, 0<=Xi,Yi<=10^3

对于60%的数据,1<=n<=1000, 0<=Xi,Yi<=10^5

对于80%的数据,1<=n<=10000,0<=Xi,Yi<=10^9

对于所有数据,1<=n<=50000,0<=Xi,Yi<=10^9


【题目分析】

相似题目:使每位同学都有座位的最少移动次数

贪心。

本题的核心问题是要将n台显示器和n个电源插座进行一一连接,且每个插座最多只能给一台显示器供电,目标是让连接所有显示器和插座所使用的电源线总长度最小。由于是在一维直线上,只需考虑直线距离,也就是两点坐标差值的绝对值。

要实现电源线总长度最小,关键在于将显示器和插座按照坐标从小到大排序,然后依次对应连接,这样就能保证每一对显示器和插座之间的距离之和最小。

【参考答案】

#include<bits/stdc++.h> 
using namespace std;
int x[50010],y[50010];
long long sum=0;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>x[i];
    }
    for(int i=1;i<=n;i++){
        cin>>y[i];
    }
    sort(x+1,x+1+n);
    sort(y+1,y+1+n);
  
    for(int i=1;i<=n;i++){
        sum+=abs(y[i]-x[i]);
    }
    cout<<sum;
    return 0;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【题解】周末舞会

    【题目描述】假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等...

    【题解】红与黑

    【题解】红与黑

    【题目描述】有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。【输入】包括多组数据。每...

    【题解】最少操作使数组递增

    【题目描述】给你一个整数数组 nums (下标从 0 开始)。每一次操作中,你可以选择数组中一个元素,并将它增加 1 。比方说,如果 nums = [...

    【题解】最小新整数

    【问题描述】第⼀⾏有x个正整数a1,a2,..,ax,第⼆⾏有y个正整数b1,b2,...,by,第三⾏有z个正整数c1,c2,...,cz,假设第⼀⾏的x个正整数中的最⼤值为a、第⼆⾏的y个正整数中...

    【题解】01背包

    【题目描述】一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn,求旅行者能获得最大总价值。【输入描述】第一...

    【题解目录】友好城市

    【题解目录】友好城市

    【题目描述】Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河...