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

【题解】最短距离

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

【题目描述】

在一条一维的直线上,存在着 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;
}


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

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

分享给朋友:

相关文章

【题解】最大比例

【题目描述】X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。并且,相邻的两个级别间的比例是个固定值。也就是说:所有级别的奖金数构成了一个等比数列。比如:16,24,36,54其等比值为:3...

【题解】最低通行费

【题目描述】一个商人穿过一个N×N的正方形的网格,去参加一个非常重要的商务活动。他要从网格的左上角进,右下角出。每穿越中间1个小方格,都要花费1个单位时间。商人必须在(2N-1)个单位时间穿越出去。而...

【题解】数字的选择

【题目描述】有n个非负整数,请从这n个非负整数中,选出m个数,在不改变m个数的顺序的情况下,构成一个新数列,要求该数列的中相邻两个数的差值绝对值的和尽可能小。请问,这个最小的差值绝对值的和是多少?比如...

【题解】翻手算法

翻手算法(fanshou.cpp) 【问题描述】 ⼩酷爱算法,他在编程珠玑⼀书中了解到了⼀种新的算法——翻⼿算法,为了更好的理解算 法,⼩明找来⼀叠纸牌,每⼀张纸牌上只有⼀个⼤写或...

【题解】区间和

1.区间和(sum.cpp)【描述】输入一个整数Q,进行Q次询问,每次给定两个整数l和r,每一次输出l~r中所有平方数的和 % 1000000007【输入】第一行是一个整数Q后面的Q行每行有...

【题解】后缀表达式的值

【题解】后缀表达式的值

【题目描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标...