zoukankan      html  css  js  c++  java
  • hdu 2083

    原题连接:

      http://acm.hdu.edu.cn/showproblem.php?pid=2083

    题意:

      给定x轴上n个点,求任意一点到其他点距离和的最小值。

    思路:

      (1)当n=2时:sum=|a-b|(点用a,b,c.......表示);

      (2)当n>2时:以n=3为例,a=1,b=5,c=10。sum1=|a-b|+|a-c|=13、sum2=|b-a|+|b-c|=6、sum3=|c-a|+|c-b|=14 (数据可自己模拟测试);

      由此可以看出当点是有序排列时,中间的点到其他点的距离和是最小的(n为奇、偶时,需另判断);

    代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cmath>
     4 #include<algorithm>
     5 
     6 using namespace std;
     7 
     8 int main()
     9 {
    10   int t,n,a[501];
    11   int i;
    12   cin>>t;
    13   while(t--)
    14   {
    15     cin>>n;
    16     for(i=0;i<n;i++)
    17     {
    18       cin>>a[i];
    19     }
    20      sort(a,a+n);
    21     if(n%2==0)
    22     {
    23       long long A=0,B=0;
    24       for(i=0;i<n;i++)
    25       {
    26         A+=abs(a[n/2]-a[i]);
    27         B+=abs(a[n/2-1]-a[i]);
    28       }
    29       if(A>B)
    30         printf("%lld
    ",B);
    31       else
    32         printf("%lld
    ",A);
    33     }
    34     else
    35     {
    36       long long A=0;
    37       for(i=0;i<n;i++)
    38       {
    39         A+=abs(a[n/2]-a[i]);
    40       }
    41       printf("%lld
    ",A);
    42     }    
    43   }
    44 
    45 return 0;
    46 }
  • 相关阅读:
    13、字符串相互匹配删除
    12、指定长度替换制表符
    11、输入字符颠倒输出
    10、字符串输入删除末尾特殊符,清除空行
    9、筛选满足长度条件的输入内容进行输出
    8、获取输入的字符串并输出最长的那个
    7、初识函数
    6、计数垂直直方图输出
    5、计数水平直方图输出
    Tiny4412 Uboot
  • 原文地址:https://www.cnblogs.com/x-x-y/p/6885864.html
Copyright © 2011-2022 走看看