解题思路:

    对显示器坐标 a[] 和插座坐标 b[] 排序后,按顺序配对(第 i 个显示器连第 i 个插座),

这是数学上的 “最小总距离” 策略(类似 “贪心”)。

     排序的必要性:

                                    示例(不排序错误): 

                                    输入: 2 

                                                   3 1  (显示器位置)

                                                   2 4  (插座位置) 

                                     不排序配对:|2-3| + |4-1| = 1 + 3 = 4(错误) 

                                     排序后配对:|2-1| + |4-3| = 1 + 1 = 2(正确,这是最小值)

注意事项:

①排序算法建议用 C 标准库的 qsort,时间复杂度是 O(nlogn),因其效率较高更适合大规模数据,且书写简便。

如若用别的一些如冒泡排序则会因其效率太低,不适于大规模数据,出现超时现象。

②求直线距离要加绝对值,用abs函数

参考代码:

#include<stdio.h>

#include<math.h>                                          //用于绝对值函数(abs)

#include<stdlib.h>                                        //用于排序函数(qsort)

int compare(const void *x,const void *y)         //用于qsort函数,最为其的一个参数,

{                                                                                         //用于选取两个数作差比较,根据正负进行升序排序

        return *(int *)x-*(int *)y;

}

int main()

{

        int a[50000],b[50000];                         //据题目要求n<=50000

        int i,n;

        long long sum=0;                                 //避免数据过大出错,求和选用long long

        scanf("%d",&n);                                   //输入总数n

        for(i=0;i<n;i++)

        {

                scanf("%d",&a[i]);                    //显示器坐标

        }

        for(i=0;i<n;i++)

        {

                scanf("%d",&b[i]);                   //插座坐标

        }

        //对数组a,b进行排序

        qsort(a, n, sizeof(int), compare);

        qsort(b, n, sizeof(int), compare);

        for(i=0;i<n;i++)

        {

                sum+=abs(b[i]-a[i]);                  //直线距离求和

        }

        printf("%lld",sum);                           //输出总长度

        return 0;

}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论