您的位置:首页 > 理论基础 > 计算机网络

(博客搬迁)pku2231 Moo Volume(数学题http://poj.org/problem?id=2231)

2011-11-07 19:20 811 查看
分析:求所有牛的通信路程的总和。查看数据,如果用二重循环会超时,而且数据比较大,所以要用__int64型。因为这是一维的,所以可以先排序,然后可以推出一个数学关系式。每增加一头牛,路程总和会增加(pos[i] - pos[i-1])*2 + (pos[i] - pos[i-2])*2 + ...+(pos[i] - pos[1])*2 = {(pos[i] * (i-1) - (pos[1] + pos[2] + ... +pos[i-1])
}* 2 ,
code:

#include<stdio.h>

#include<stdlib.h>

#define N 10002

__int64 pos
;

int cmp(const void *a, const void *b)

{

return *(__int64*)a - *(__int64*)b;

}

int main()

{

__int64 sum;

int i, n;

while(scanf("%d", &n) != EOF)

{

for(i = 1; i <= n; i++)

scanf("%I64d", &pos[i]);

qsort(pos+1, n, sizeof(pos[0]), cmp);

sum = 0;

for(i = 2; i <= n; i++)

{

sum += pos[i] * (i-1) - pos[i-1];

pos[i] += pos[i-1];

}

sum *=2;

printf("%I64d\n", sum);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: