• 大牛的距离(笑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;
    }
    return 0;
    }
  • 相关阅读:
    HDU 2842 (递推+矩阵快速幂)
    HDU 2838 (DP+树状数组维护带权排序)
    HDU 2836 (离散化DP+区间优化)
    HDU 2831 (贪心)
    HDU 2818 (矢量并查集)
    HDU 2822 (BFS+优先队列)
    HDU 3090 (贪心)
    HDU 3089 (快速约瑟夫环)
    XCOJ 1103 (LCA+树链最大子段和)
    HDU 3078 (LCA+树链第K大)
  • 原文地址:https://www.cnblogs.com/supersumax/p/5882472.html
Copyright © 2020-2023  润新知