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;
    }

  • 相关阅读:
    .net 命名规范
    解决Swagger刷新后不能保持登录问题
    修改表结构后视图错位问题
    创建.net api文档
    编写.net core tools教程
    VuePress 侧边栏几种配置
    VS 好用快捷键
    Jenkins 修改端口
    获取当前被调用的方法
    遇到异常 add-migration Build failed 解决办法
  • 原文地址:https://www.cnblogs.com/supersumax/p/5882475.html
Copyright © 2011-2022 走看看