• 计蒜客---线段的总长


    数轴上有N个点,任意两点连线得到n(n-1)条线段,试求线段的总长。

    输入格式:

    第一行,一个整数N,表示点数。 接下来N行,每行一个整数X_i,表示点的坐标。

    输出格式:

    输出为一个整数,表示线段的总长。

    N  < =  10000  ,  0  < =  X_i  < =  1000000000

    样例输入

    5
    1
    5
    3
    2
    4
    

    样例输出

    40

    题解:假如考虑一下算法,可以将要求变换成一个个相邻线段的和
    …略…,对于排序好的n个点,得到n-1个线段,每个线程会重复i*(n-i)次
    以n=5为例,有4条线段,长度分别是a、b、c、d,那么最终结果是 1*(5-1)*a + 2*(5-2)*b + 3*(5-3)*c + 4*(5-4)*d 再乘以2
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <vector>
     6 #include <cstdlib>
     7 #include <iomanip>
     8 #include <cmath>
     9 #include <ctime>
    10 #include <map>
    11 #include <set>
    12 #include <queue>
    13 using namespace std;
    14 #define lowbit(x) (x&(-x))
    15 #define max(x,y) (x>y?x:y)
    16 #define min(x,y) (x<y?x:y)
    17 #define MAX 100000000000000000
    18 #define MOD 1000000007
    19 #define pi acos(-1.0)
    20 #define ei exp(1)
    21 #define PI 3.141592653589793238462
    22 #define INF 0x3f3f3f3f3f
    23 #define mem(a) (memset(a,0,sizeof(a)))
    24 typedef long long ll;
    25 ll gcd(ll a,ll b){
    26     return b?gcd(b,a%b):a;
    27 }
    28 bool cmp(int x,int y)
    29 {
    30     return x>y;
    31 }
    32 const int N=10005;
    33 const int mod=1e9+7;
    34 ll a[N];
    35 int main(){
    36     ll n, i;
    37     cin >> n;
    38     for(i=0;i<n;i++)
    39         cin>>a[i];
    40     sort(a,a+n);
    41     ll res=0;
    42     for(i=1;i<n;i++){
    43         res +=(a[i]-a[i-1])*i*(n-i);
    44     }
    45     cout<<res*2<<endl;
    46 }
  • 相关阅读:
    IT之光
    个人作业3——个人总结(Alpha阶段)
    结对编程2——单元测试
    个人作业2
    结对作业1
    个人作业1
    个人作业3——个人总结(Alpha阶段)
    结对编程2--单元测试
    个人作业2——英语学习APP案例分析
    结对编程1
  • 原文地址:https://www.cnblogs.com/wydxry/p/7281808.html
Copyright © 2020-2023  润新知