uva11130

简介: 分金币题意:圆桌上有n个人,每人有若干金币,金币总和能整除n,每个人可以分给他相邻两个人若干金币,现在需要使每个人最终金币数量相同,求需要转移的金币数量总和的最小值。类型:单变量极值->中位数问题 代码 #include #include using namespace std; co...

分金币
题意:圆桌上有n个人,每人有若干金币,金币总和能整除n,每个人可以分给他相邻两个人若干金币,现在需要使每个人最终金币数量相同,求需要转移的金币数量总和的最小值。
类型:单变量极值->中位数问题

代码

#include <stdio.h>
#include <iostream>
using namespace std;
const int maxn = 1000000 + 10;
long long a[maxn], c[maxn], tot, m;
int main(){
    int n;
    while(scanf("%d", &n)!=EOF){
        tot = 0;
        int i, j;
        for(i=1; i<=n; i++){
            scanf("%lld", a+i);
            tot += a[i];
        }
        m = tot / n;
        c[0] = 0;
        for(i=1; i
            c[i] = c[i-1] + a[i] - m;
        sort(c, c+n);
        long long x1 = c[n/2];
        long long ans = 0;
        for(i=0; i
            ans += abs(x1 - c[i]);
        printf("%lld\n", ans);
    }
    return 0;
}



目录
相关文章
|
11月前
|
Java 文件存储
hdu1128 Self Numbers
hdu1128 Self Numbers
32 0
|
11月前
|
Java 测试技术
hdu 1228 A + B
hdu 1228 A + B
41 0
|
算法 Java
HDU 2084 数塔
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
168 0
HDU2203亲和串
博客水平见水平......目前阶段就是这么菜,我会好好努力的!毕业直接拿到阿里offer!
1224 0
|
机器学习/深度学习
|
算法 Java 文件存储
|
测试技术 Java
|
C++ Java
HDU1880
题意就是根据咒语查功能,根据功能查看是否存在相应咒语,题意简单,不过是道不错的练习题。         下面的都MLE了,听说C++用G++提交才可以AC,否则也MLE;方法很多,不想做了……         方法一:我用Java的HashMap一直MLE,即便由value反查key减少映射数也一样MLE,听说C++的map可以AC。
1077 0