zoukankan      html  css  js  c++  java
  • BZOJ 1108: [POI2007]天然气管道Gaz

                                               1108: [POI2007]天然气管道Gaz

    Description

      Mary试图控制成都的天然气市场。专家已经标示出了最好的天然气井和中转站在成都的地图。现在需要将中转
    站和天然气井连接起来。每个中转站必须被连接到正好一个钻油井,反之亦然。 Mary特别指名,建设的天然气管
    道必须从某个天然气井开始,向南或者向东建设。Mary想知道怎么连接每个天然气井和中转站,使得需要的天然气
    管道的总长度最小。

    Input

      第一行为一个正整数n(2<=n<=50000),表示天然气井的数量(中转站的数量与之相等)。接下来n行,每行两
    个整数xi和yi(0<=xi,yi<=100000),表示天然气井的坐标。向东走则x坐标增加,向北走则y坐标增加。接下来n
    行,每行两个数xj'和yj'(0<=xj',yj'<=100000),表示中转站的坐标。

    Output

      第一行包含一个数,表示最短的连接管道长度。

    Sample Input

    3
    3 5
    1 2
    4 3
    6 3
    5 2
    2 1

    Sample Output

    9

    HINT

    好吧 题目保证有解 也就是 每个黑点都会有白点和他匹配

    我一直在纠结能不能全部匹配......

    第一眼 好像是最小匹配   

    但是天然气管道只能南或者向东建设 

    也就是曼哈顿距离 1s变水题。。。。

    假设存在两个点 黑点A(x1,y1)    白点B(x2,y2) 

    距离为 (x2-x1)+(y1-y2) 

     不管黑白点怎么匹配 黑点总是 -x +y 

               白点总是 +x -y

    所以 统计一下ans就好了

     1 #include <cstdio>
     2 #include <cctype>
     3 
     4 typedef long long LL;
     5 
     6 int n;
     7 
     8 LL ans;
     9 
    10 inline void read(int&x) {
    11     int f=1;register char c=getchar();
    12     for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());
    13     for(;isdigit(c);x=x*10+c-48,c=getchar());
    14     x=x*f;
    15 }
    16 
    17 int hh() {
    18     read(n);
    19     for(int x,y,i=1;i<=n;++i) read(x),read(y),ans-=x,ans+=y;
    20     for(int x,y,i=1;i<=n;++i) read(x),read(y),ans+=x,ans-=y;
    21     printf("%lld
    ",ans);
    22     return 0;
    23 }
    24 
    25 int sb=hh();
    26 int main(int argc,char**argv) {;}
    代码
  • 相关阅读:
    Integer类_java_1
    Pytest使用随笔_1_"no tests ran"
    postgres执行计划_1_索引
    Jprofile使用随笔_2_内存泄漏
    leetcode76. Minimum Window Substring
    leetcode87. Scramble String
    hihocoder1310 岛屿
    leetcode644. Maximum Average Subarray II
    leetcode132. Palindrome Partitioning II
    leetcode143. Reorder List
  • 原文地址:https://www.cnblogs.com/whistle13326/p/7521094.html
Copyright © 2011-2022 走看看