POJ 2231 Moo Volume , 简单公式推导

来源:互联网 发布:文章数据库设计 编辑:程序博客网 时间:2024/06/08 02:20

POJ 2231 Moo Volume


http://poj.org/problem?id=2231



Time Limit: 1000MS   Memory Limit: 65536K

Description

Farmer John has received a noise complaint from his neighbor, Farmer Bob, stating that his cows are making too much noise. 

FJ's N cows (1 <= N <= 10,000) all graze at various locations on a long one-dimensional pasture. The cows are very chatty animals. Every pair of cows simultaneously carries on a conversation (so every cow is simultaneously MOOing at all of the N-1 other cows). When cow i MOOs at cow j, the volume of this MOO must be equal to the distance between i and j, in order for j to be able to hear the MOO at all. Please help FJ compute the total volume of sound being generated by all N*(N-1) simultaneous MOOing sessions.

Input

* Line 1: N 

* Lines 2..N+1: The location of each cow (in the range 0..1,000,000,000).

Output

There are five cows at locations 1, 5, 3, 2, and 4.

Sample Input

515324

Sample Output

40

Hint

INPUT DETAILS: 

There are five cows at locations 1, 5, 3, 2, and 4. 

OUTPUT DETAILS: 

Cow at 1 contributes 1+2+3+4=10, cow at 5 contributes 4+3+2+1=10, cow at 3 contributes 2+1+1+2=6, cow at 2 contributes 1+1+2+3=7, and cow at 4 contributes 3+2+1+1=7. The total volume is (10+10+6+7+7) = 40.




题目大意:数轴上共有N头牛,每头牛有一个坐标。每头牛都要向其他所有牛发出一个叫声,因此一共有 N*(N-1) 个叫声。每个叫声的大小等于两头牛之间坐标差的绝对值。输出所有叫声大小的和。


思路:简单公式推理。首先用sort将所有牛的坐标从小到大排。

假设第 i-1 头牛发出所有叫声和为F i-1,第i到第i-1头牛之间的距离差为d;

那么显然,第i 头牛向第i-1之前的牛发出叫声时,对每头牛都要比从i-1多出一个d,

同理,第i头牛向它之后的牛发出叫声时,对每头牛都要比从i-1少一个d;

所以,F i=F i-1  + d*(i-1-1)  -  d*(n-i) ;复杂度是O(n)。


需要注意的一点:存储需要用long long 。


代码如下







0 0
原创粉丝点击