zoukankan      html  css  js  c++  java
  • ACdream

    Time Limit: 2000/1000MS (Java/Others) Memory Limit: 262144/131072KB (Java/Others)

    Problem Description

    平面上有n个油井,现在要建立一条主干线,用来把所有的油井产出的原油都输送出去,主干线是平行于x轴的一条直线,每个油井通过一条支线把原油输送到主干线上,现在给定n个油井在平面上的坐标,那么应该把主干线建在什么地方才能让所有的支干线的总长度最小呢?
    这里写图片描述

    Input

    首先一个正整数n,接下来n行每行两个整数,代表n个油井在平面上的位置。n和坐标都是小于等于1000000的正整数。

    Output

    输出总的支干线长度的最小值,每个结果占一行。

    Sample Input

    2
    0 0
    10 10

    Sample Output

    10

    Source
    第九届北京化工大学程序设计竞赛

    Manager
    rihkddd


    这里写图片描述
    当n为奇数时,显然当主干线在中间点2点时支线距离和最小,为x1+x2
    这里写图片描述
    n为偶数时,主干线放在2点或3点时和放在2点,3点之间是距离和是相同的,所以用奇数的先找中间点的方法在偶数的情况下同样适用。
    所以这道题的关键是找出来处于中间的一个点
    ps:不要忘了数据范围,用int会wa,要改成long long。

    #include<stdio.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    struct node{
        long long x,y;
    }a[1000000+10]; 
    int cmp(node u,node v)
    {
        return u.y<v.y;
    }
    int main()
    {
        long long n,sum=0,i;
        scanf("%lld",&n);
        for(i=0;i<n;i++) scanf("%lld%lld",&a[i].x,&a[i].y);
        sort(a,a+n,cmp);
        long long mid=a[n/2].y;
        for(i=0;i<n;i++)
        {
            sum+=abs(a[i].y-mid);
        }
        printf("%lld
    ",sum);
        return 0;
    }
  • 相关阅读:
    NOIP201310华容道
    NOIP201110观光公交
    markdown
    【NOIP2016】愤怒的小鸟
    【NOIP2016】组合数问题
    [TJOI2019]唱,跳,rap,篮球(生成函数,组合数学,NTT)
    CF1217E Sum Queries? (线段树)
    CF1178F Short/Long Colorful Strip(DP)
    ZROI 暑期高端峰会2019 总结
    [HNOI2012]集合选数(构造,状态压缩,DP)
  • 原文地址:https://www.cnblogs.com/Friends-A/p/9309074.html
Copyright © 2011-2022 走看看