Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

在一条数轴上有N头牛在不同的位置上,每头牛都计算到其它各头牛的距离。求这n*(n-1)个距离的总和。

【数据规模】

1<= N <= 10000。每头牛所在位置是一个范围在0到1,000,000,000之内的整数。

【输入格式】

第一行:N

后面N行,每行一个整数,表示一头牛所在位置。

【输出格式】

一个整数。

测试点说明:

说明:

(1+2+3+4)+(4+3+2+1)

+(2+1+1+2)+(1+1+2+3)

+(3+2+1+1) = 40

Sample Input

5

1

5

3

2

4

Sample Output

40

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t041

【题解】



将所有的牛的位置按照升序排;

设dis[i]表示第i头牛到前i-1头牛的总距离;

则dis[i] = dis[i-1]+(i-2)*(a[i]-a[i-1])+a[i]-a[i-1];

其中dis[i-1]+(i-2)*(a[i]-a[i-1])表示i和前i-2头牛各连i-2条边的距离和(以i-1号牛为中转站,增加i-2条a[i]-a[i-1]边权的边就能表示这个状态了),然后再加上一条a[i]-a[i-1]边,表示在第i号牛和第i-1号牛之间再连一条边;

最后∑dis[i];

然后再乘2;(题目要求的是A(n,2)的排列);



【完整代码】

#include <iostream>
#include <cstdio>
#include <algorithm>
#define LL long long using namespace std; const int MAXN = 1e4+10; int n;
LL a[MAXN];
LL dis[MAXN];
LL ans = 0; int main()
{
//freopen("F:\\rush.txt","r",stdin);
cin >> n;
for (int i = 1;i <= n;i++)
cin >> a[i];
sort(a+1,a+1+n);
dis[1] = 0;dis[2] = a[2]-a[1];
for (int i = 3;i <= n;i++)
{
dis[i] = dis[i-1]+(i-2)*(a[i]-a[i-1]);
dis[i]+=a[i]-a[i-1];
}
for (int i = 1;i <= n;i++)
ans+=dis[i];
cout << ans*2<<endl;
return 0;
}

【t041】距离之和的更多相关文章

  1. Hdu4311 || 4312Meeting point-1/-2 n个点中任意选一个点使得其余点到该点曼哈顿距离之和最小

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  2. 某个点到其他点的曼哈顿距离之和最小(HDU4311)

    Meeting point-1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. [51NOD1405] 树的距离之和(树DP)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405 (1)我们给树规定一个根.假设所有节点编号是0-(n-1 ...

  4. 51Nod 1110 距离之和最小 V3 中位数 思维

    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 X轴上有N个点,每个点除了包括一个位置数据X[i],还包括一个权值W[i].点P到点P[i]的带权距离 = 实际距离 ...

  5. 51Nod 1108 距离之和最小 V2 1096 距离之和最小 中位数性质

    1108 距离之和最小 V2基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注三维空间上有N个点, 求一个点使它到这N个点的曼哈顿距离之和最小,输出这个最小 ...

  6. 51 nod 1405 树的距离之和

    1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题   给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之 ...

  7. [Swift]LeetCode834. 树中距离之和 | Sum of Distances in Tree

    An undirected, connected tree with N nodes labelled 0...N-1 and N-1 edges are given. The ith edge co ...

  8. 51nod 1405 树的距离之和 树形dp

    1405 树的距离之和 基准时间限制:1 秒 空间限制:131072 KB   收藏  关注 给定一棵无根树,假设它有n个节点,节点编号从1到n, 求任意两点之间的距离(最短路径)之和. Input ...

  9. hdu6446 网络赛 Tree and Permutation(树形dp求任意两点距离之和)题解

    题意:有一棵n个点的树,点之间用无向边相连.现把这棵树对应一个序列,这个序列任意两点的距离为这两点在树上的距离,显然,这样的序列有n!个,加入这是第i个序列,那么这个序列所提供的贡献值为:第一个点到其 ...

  10. HDU 4311 Meeting point-1 求一个点到其它点的曼哈顿距离之和

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4311 解题报告:在一个平面上有 n 个点,求一个点到其它的 n 个点的距离之和最小是多少. 首先不得不 ...

随机推荐

  1. 不固定高宽的 div 水平垂直居中

    <div class="father"> <div id="main"></div> </div> .fathe ...

  2. SQL、Linq相关字段搜索

    结合一些分词组件,如盘古,对于用户查询关键字红按钮很容易分出 ‘红’ ‘按钮’二个单词 我们假设产品名称列里面是红色,规格里面是按钮 /* 普通sql实现全文搜索declare @key1 nvarc ...

  3. Python day3 知识回顾

    names = ["Jonathen","Joesph","Jotaro","Josuke",["Mea&qu ...

  4. postgresql 不同数据库不同模式下的数据迁移

    编写不容易,转载请注明出处谢谢, 数据迁移 因为之前爬虫的时候,一部分数据并没有上传到服务器,在本地.本来用的就是postgresql,也没用多久,数据迁移的时候,也遇到了很多问题,第一次使pg_du ...

  5. 一个一线城市的IT白领的生活成本:3万/年

    自从大学毕业,经济独立,就开始全面统计各种生活开支.仔细的去统计下,发现开销还是挺大的. 定理:开销越大,就意味着你每个月的收入必须越高. 三族鼎立节余族: 收入-开支 > 0月光族:收入-开支 ...

  6. android-LinearLayout 控件占满父容器位置实现

    经常碰到需要把一个控件放在手机底部的情况,以前都是在LinearLayout尝试使用gravity="bottom" ,但是,没有效果,后来在网上查到了方法,如下 <Line ...

  7. mysql 压力测试之批量插入自增字段不连续问题

    Gaps in auto-increment values for “bulk inserts” With innodb_autoinc_lock_mode set to 0 (“traditiona ...

  8. 洛谷P2147 [SDOI2008]Cave 洞穴勘测

    题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假 ...

  9. CF741DArpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths(DSU on tree)

    题目大意: 给定一个以1为根的树,每条路径上都有一个字符(a~v共22个)询问对于每一个子树内最长的路径上字母经排序后可以形成回文串的最长路径多长 解题思路: 假定给你一个字符串,如何判定其经打乱能否 ...

  10. 洛谷 P1032 字符变换

    洛谷 P1032 字符变换 题目描述 已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则): A1​ -> B1​ A2​ -> B2​ 规则的含义为:在 A 中的子串 A1​ ...