POJ

来源:互联网 发布:caxa编程快捷键 编辑:程序博客网 时间:2024/06/07 08:46

Moo Volume
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 22767 Accepted: 6901

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.

Source

USACO 2005 January Silver


题意:有n只牛,每只牛在各自的位置pi,求∑(i=1,n) ∑(j=1,n) ( abs ( pi - pj ) )


思路:先对位置从小到大进行排序,然后从第二个点开始往后,每次加上 该点到该点之前的所有点的距离之和dist ( i )(第i个点)

dist ( i ) 可以由 dist ( i - 1 ) + ( pos( i ) - pos( i - 1) ) * ( i - 1 )得到


不过O(n^2)的效率也可以过,注意最后的和会超 int

#include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>#define LL long longusing namespace std;const int N = 10000 + 10;LL n,pos[N],ans = 0,dis = 0;;int main(){    scanf("%lld",&n);    for(LL i=0;i<n;i++) scanf("%lld",&pos[i]);    sort(pos, pos+n);    for(int i=1;i<n;i++){        dis = dis + (pos[i] - pos[i-1])*(i);//当前点与其前面点之和        ans += dis;    }    printf("%lld\n",ans * 2);    return 0;}