uva 1388
<pre name="code" class="cpp"><span style="font-size:14px;">#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN (1000000+5)
long long per_g[MAXN], give[MAXN];
int main(){
int n;
while(scanf("%d", &n) != EOF){
long long sum = 0;
for(int i = 1; i <= n; i++){
scanf("%lld", &per_g[i]);
sum += per_g[i];
}
long long e_g = sum / n;
give[0] = 0;
for(int i = 1; i <= n; i++) give[i] = give[i-1] + per_g[i] - e_g;
sort(give+1, give+n+1);
long long mid;
if(n % 2) mid = give[n/2+1];
else mid = (give[n/2]+give[n/2+1]) / 2;
long long ans = 0;
for(int i = 1; i <= n; i++) ans += abs(mid - give[i]);
printf("%lld\n", ans);
}
return 0;
}</span>
本文介绍了解决UVA1388问题的一种算法实现,通过计算每个参与者的财产分配差值来确定最小调整成本。使用C++语言实现了输入处理、排序和计算总成本等功能。

被折叠的 条评论
为什么被折叠?



