zoukankan      html  css  js  c++  java
  • 大牛的距离(笑cry)精简算法

    在一条数轴上有N头牛在不同的位置上,每头牛都计算到其它各头牛的距离。求这n*(n-1)个距离的总和。1<= N <= 10000。每头牛所在位置是一个范围在0到1,000,000,000之内的整数。

    /*********************************************************************************



    此题坑在取值上,10000个数,超过了二次循环的范围,但这里的二次循环是指从一开始的循环,所以思路如下

    输入数组之后,对数组进行排序

    例:

    1 2 3 6 9
     1:1-1 2-1 3-1 6-1 9-1
     2:2-1 2-2 3-2 6-2 9-2
     3:3-1      3-2 3-3  6-3 9-3
     6:6-1 6-2 6-3 6-6 9-6
     9:9-1 9-2 9-3 9-6 9-9

    注意,排过序后,再次计算距离就会有0之后的数(即红字之后的数)这些数在下面一定有对应的数,这些数无需再次计算,乘二即可。

    所以二次循环可用

    代码实现如下:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int main()
    {
    long long m,n,p,q,a[26666],sum=0;
    cin>>m;
    for(int i=1;i<=m;i++)
    {
    cin>>a[i];
    }
    sort(a+1,a+m+1);
    for(int i=1;i<=m;i++)
    {
    for(int j=i;j<=m;j++)
    {
    p=a[i]-a[j];
    p=p*-1;
    sum=sum+p;
    }
    }
    cout<<sum*2<<endl;
    }

  • 相关阅读:
    mybatis+sql语句
    坐标转换
    sql语句含中文JDBC查询不到
    架构阅读笔记16
    架构阅读笔记15
    架构阅读笔记14
    windows安装imgaug包报错中Shapely
    java除法
    Java输入输出问题复习
    java自学,基础,入门
  • 原文地址:https://www.cnblogs.com/supersumax/p/5882475.html
Copyright © 2011-2022 走看看