zoukankan      html  css  js  c++  java
  • hihocoder-1931-最短管道距离

    hihocoder-1931-最短管道距离

    #1931 : 最短管道距离

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    在一张2D地图上有N座城市,坐标依次是(X1, Y1), (X2, Y2), ... (XN, YN)。  

    现在H国要修建一条平行于X轴的天然气主管道。这条管道非常长,可以认为是一条平行于X轴的直线。  

    小Ho想知道如何修建这条管道,可以使N座城市到管道的垂直距离之和最小。请你求出这个最小的距离之和。

    输入

    第一行包含一个整数N。  

    以下N行每行包含两个整数Xi, Yi。  

    1 <= N <= 100000  

    0 <= Xi, Yi <= 1000000  

    输出

    一个整数,代表最小的距离之和。

    样例输入
    4  
    0 0  
    0 100  
    100 0  
    100 100
    样例输出
    200

    题解:

      这道题的实质是:计算数组的差异性。只需要讨论城市在y坐标值,收集所有城市的y,排序后,双指针前后夹扫。

      时间复杂度: O(N logN) 

    #include <cstdlib> 
    #include <cstdio> 
    #include <cstring> 
    const int MAXN = 100000 + 10;
    
    int n, num[MAXN]; 
    
    int cmp(const void *a, const void *b)
    {
    	return (*(int *)a - *(int *)b); 
    }
    
    int main(){ 
        long long ans = 0; 
    
        int x, y; 
        scanf("%d", &n); 
        for(int i=0; i<n; ++i)
        {
        	scanf("%d %d", &x, &y);
        	num[i] = y;  
        }
    
        qsort(num, n, sizeof(num[0]), cmp); 
        
        int i = 0, j = n-1;
        while(i <= j)
        {
        	ans += (long long)(num[j] - num[i]); 
        	++i; 
        	--j; 
        }
        printf("%lld
    ", ans); 
        return 0; 
    } 
    

      

  • 相关阅读:
    Spring-AOP
    spring学习笔记
    费曼学习法:学习任何知识的好方法
    Spring学习
    Spring学习笔记
    Markdown学习(Typora)
    2020-07-16日报博客
    2020-07-15日报博客
    2020-07-14日报博客
    2020-07-13日报博客
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/10461040.html
Copyright © 2011-2022 走看看