zoukankan      html  css  js  c++  java
  • P1862 输油管道问题

    P1862 输油管道问题

    题目背景

    听说最近石油危机

    所以想到了这题

    题目描述

    某石油公司计划建造一条由东向西的主要输油管道。该管道要穿过一个有n口油井的油田。从每口油井都要有一条输油管道沿最短路径(或南或北)与主管道相连。如果给定n口油井的位置,及它们的x坐标(东西向)和y坐标(南北向),应如何确定主管道的最优位置,即使各油井到主管道之间的输油管道长度总和最小的位置?证明可规定时间内确定主管道的最优位置。

    输入输出格式

    输入格式:

    第一行是油井数n(1<=n<=10000)

    接下来n行是油井的位置,每行2个整数x和y(-10000<=x,y<=10000)

    输出格式:

    只有一行

    是油井到主管道之间的输油管道最小长度总和

    输入输出样例

    输入样例#1:
    5
    1 2
    2 2
    1 3
    3 -2
    3 3
    输出样例#1:
    6

    这条输油管道肯定是在中间的一个位置比较好,我们就让它在中间好了。
    如果n为奇数,说明建在中间的那一条管道一定是所要求的,让它是就好了,n为偶数的话,在中间的两条管道之间的任意一个位置都行,让它在两条之间
    我们把n个点排序,求出中位数即可
     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 #include<cstdlib>
     5 using namespace std;
     6 int x[10100],y[10100],n,m,ans;
     7 
     8 int main()
     9 {
    10     scanf("%d",&n);
    11     for (int i=1; i<=n; ++i)
    12     {
    13         scanf("%d%d",&x[i],&y[i]);
    14     }
    15     sort(y+1,y+n+1);
    16     if (n%2==0) m = (y[n/2]+y[n/2+1])/2;
    17     else m = y[n/2+1];
    18     for (int i=1; i<=n; ++i)
    19         ans += abs(m-y[i]);
    20     printf("%d",ans);
    21     return 0;
    22 }
     
  • 相关阅读:
    python_获得列表中重复的项的索引
    sql的一些知识_高级
    464. Can I Win
    rankable cache class
    two sum class
    Generate a binary tree from parent->child relationship
    An implementation of this using bufferedReader:
    implement list use arrary
    12. Integer to Roman
    Partition of a set into K subsets with equal sum
  • 原文地址:https://www.cnblogs.com/mjtcn/p/7116759.html
Copyright © 2011-2022 走看看