zoukankan      html  css  js  c++  java
  • UVA11300 Spreading the Wealth

    思路

    经典的环形均分纸牌问题

    从中位数分最优

    所有数减去平均值之后做前缀和,然后和中位数求差的绝对值即可

    stl nth_element(a+1,a+pos,a+n+1)
    作用是把pos大的值放在a[pos]的位置上

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <iostream>
    #define int long long
    using namespace std;
    int a[1000100];
    int my_abs(int x){
        return (x>=0)?x:-x;
    }
    signed main(){
        int n;
        while(scanf("%lld",&n)==1){
            int ave=0,ans=0;
            for(int i=1;i<=n;i++)
                scanf("%lld",&a[i]),ave+=a[i];
            ave/=n;
            for(int i=1;i<=n;i++)
                a[i]-=ave;
            for(int i=1;i<=n;i++)
                a[i]+=a[i-1];
            nth_element(a+1,a+(n+1)/2,a+n+1);
            for(int i=1;i<=n;i++)
                ans+=my_abs(a[i]-a[(n+1)/2]);
            printf("%lld
    ",ans);
        }
        return 0;
    }
    
  • 相关阅读:
    NOIP模拟测试17
    C++11下的关键字
    Tyvj 1518 CPU监控(线段树)
    单身三连之三
    论求解线性方程
    单身三连之二
    单身三连之一
    20190719总结
    卡常
    论突变为零(不定更新)
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10671160.html
Copyright © 2011-2022 走看看