uva 11300

来源:互联网 发布:男神节淘宝 编辑:程序博客网 时间:2024/06/05 08:51

题意 :给你n个人的金币数, 求最少的金币转移次数, 一个人可以给左边或者右边的人一些金币, 使得最后大家的金币数相等

#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;typedef long long ll;ll a[1000010], c[1000010];ll ans, sum, m;int main(){int n;while(scanf("%d", &n) == 1)  {     sum = 0;   for(int i=1; i<=n; i++)     {      scanf("%lld", &a[i]);      sum += a[i];     }   m = sum / n;   c[1] = 0;   for(int i=2;  i<=n; i++)     c[i] = c[i-1]+m-a[i-1];   sort(c+1, c+n+1);   ll x = c[n/2];   ans = 0;   for(int i=1; i<=n; i++)      ans += abs(x-c[i]);   printf("%lld\n", ans);  }   return 0;}



原创粉丝点击