zoukankan      html  css  js  c++  java
  • HDU 4311 Meeting point-1 求一个点到其它点的曼哈顿距离之和

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4311

    解题报告:在一个平面上有 n 个点,求一个点到其它的 n 个点的距离之和最小是多少。

      首先不得不说一下做这道题囧的事,杭电用的是__int64,我前面定义的时候用的是__int64,然后后面输出结果的时候格式控制符竟然用了%lld,还小卡了一会,唉,大意了啊。

    然后感觉这题好巧妙,做法是将 x 与 y的距离分开求,我也是看了学长博客之后才懂的http://www.cnblogs.com/Lyush/archive/2012/07/27/2611044.html

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 typedef __int64 INT;
     9 
    10 struct node
    11 {
    12     INT x,y;
    13     INT tot;
    14 }seq[100005];
    15 INT sum_x[100005],sum_y[100005];
    16 
    17 bool cmp(node a,node b)
    18 {
    19     return a.x < b.x;
    20 }
    21 bool comp(node a,node b)
    22 {
    23     return a.y < b.y;
    24 }
    25 
    26 int main()
    27 {
    28     int T,n;
    29     scanf("%d",&T);
    30     while(T--)
    31     {
    32         scanf("%d",&n);
    33         for(int i = 1;i <= n;++i)
    34         seq[i].tot = 0;
    35         for(int i = 1;i <= n;++i)
    36         scanf("%I64d %I64d",&seq[i].x,&seq[i].y);
    37         sort(seq+1,seq+n+1,cmp);
    38         memset(sum_x,0,sizeof(sum_x));
    39         for(int i = 1;i <= n;++i)
    40         sum_x[i] = sum_x[i-1] + seq[i].x;
    41         for(int i = 1 ; i <= n;++i)
    42         {
    43             seq[i].tot += ( (i -1 ) * seq[i].x - sum_x[i-1]);
    44             seq[i].tot += (sum_x[n] - sum_x[i] - (n - i) * seq[i].x);
    45         }
    46         sort(seq+1,seq+n+1,comp);
    47         memset(sum_y,0,sizeof(sum_y));
    48         for(int i = 1; i <= n;++i)
    49         sum_y[i] = sum_y[i-1] + seq[i].y;
    50         for(int i = 1;i <= n;++i)
    51         {
    52             seq[i].tot += ( (i-1) * seq[i].y - sum_y[i-1]);
    53             seq[i].tot += ( sum_y[n] - sum_y[i] - (n - i) * seq[i].y);
    54         }
    55         INT ans = 0x7fffffffffffffff;
    56         for(int i = 1;i <= n;++i)
    57         ans = min(seq[i].tot,ans);
    58         printf("%I64d
    ",ans);
    59     }
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    MySQL热备脚本
    从库查看状态的时候显示“ Last_Error”
    Jenkins+svn+maven
    confluence的安装、备份和恢复(wiki)
    RAP在centos上的部署
    不停止MySQL服务的情况下修改root的密码
    给Linux装图形化界面
    大文件传输工具
    MySQL server PID file could not be found!
    find常见用法
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3360255.html
Copyright © 2011-2022 走看看