您的位置:首页 > 其它

UVA 11300 Spreading the Wealth

2014-06-06 15:34 417 查看
跟白皮书上说得一样,中位数的应用,算法思想真是很神奇。

#include <stdio.h>
#include <algorithm>

long long arr[1000002];
long long A_sum[1000002];

int cmp(const void *a, const void *b){
long long *pa = (long long*)a;
long long *pb = (long long*)b;
return *pa-*pb;
}

int _abs(int a){
return a>0 ? a : a*(-1);
}

void func(int n){
int i;
long long sum, m, x1;

sum = 0;
for(i=1; i<=n; i++)
sum += arr[i];
m = sum/n;

for(i=1; i<n; i++){
A_sum[i] = A_sum[i-1] + arr[i];
}
for(i=n; i>=1; i--){
A_sum[i] = A_sum[i-1]-(i-1)*m;
}
qsort(A_sum+1, n, sizeof(long long), cmp);

if(n%2){
x1 = A_sum[n/2+1];
}
else{
x1 = A_sum[n/2];
}

sum = 0;
for(i=1; i<=n; i++){
sum += _abs(x1-A_sum[i]);
}

printf("%lld\n", sum);
}

int main(void){
int n, i;

//freopen("input.dat", "r", stdin);
while(scanf("%d", &n) != EOF){
for(i=1; i<=n; i++){
scanf("%lld", arr+i);
}
func(n);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm uva