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);
}
}
#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);
}
}
相关文章推荐
- UVA 11300 Spreading the Wealth
- 中位数-分金币(Spreading the Wealth, UVa 11300)
- UVA11300:Spreading the Wealth
- UVA11300:Spreading the Wealth
- UVA 11300 - Spreading the Wealth(数学推导+中位数)
- (阶段四1.3)UVA 11300 Spreading the Wealth(利用中位数来解决求某一个点到给定的n个点的距离的最小值)
- 分金币(Spreading the Wealth, UVa 11300)【JAVA算法实现】
- UVA11300——Spreading the Wealth (贪心+建模)
- UVa-11300 - Spreading the Wealth(中位数)
- UVA 11300 Spreading the Wealth(数学)
- UVa 11300 Spreading the Wealth
- uva11300 Spreading the Wealth
- UVa 11300 Spreading the Wealth
- UVa 11300 Spreading The Wealth
- UVA 11300 Spreading the Wealth
- UVA 11300 SPREADING THE WEALTH 【数学】
- UVA 题目11300 - Spreading the Wealth
- UVa 11300 Spreading the Wealth
- UVA 11300 Spreading the Wealth (数学推导 中位数)
- Spreading the Wealth UVa-11300