• bzoj1045: [HAOI2008] 糖果传递(思维题)


      首先每个人一定分到的糖果都是所有糖果的平均数ave。

      设第i个人给i-1个人Xi个糖果,则有Ai-Xi+X(i+1)=ave。

      则A1-X1+X2=ave,A2-X2+X3=ave,A3-X3+X4=ave。

      X2=ave+X1-A1,A2-ave-X1+A1+X3=ave

      X3=2ave+X1-A1-A2 

      设Bi=sigma(A(1~i-1))-(i-1)*ave

      则答案为|Bi-X1|的和的最小值,求个中位数即可

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int maxn=1000010;
    int n,a[maxn];
    ll sum,ave,b[maxn],mid,now,ans;
    void read(int &k)
    {
        int f=1;k=0;char c=getchar();
        while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
        while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar();
        k*=f;
    }
    int main()
    {
        read(n);
        for(int i=1;i<=n;i++)read(a[i]),sum+=a[i];
        ave=sum/n;
        for(int i=2;i<=n;i++)b[i]=b[i-1]+a[i]-ave;
        sort(b+1,b+1+n);
        mid=b[(n+1)>>1];
        for(int i=1;i<=n;i++)
        ans+=abs(b[i]-mid);
        printf("%lld
    ",ans);
    }
    View Code
  • 相关阅读:
    HDU
    POJ
    快速幂运算
    RocketMQ集群
    RocketMQ角色介绍
    RocketMQ初探
    MySQL 串行隔离级别小记
    分布式事务笔记
    MySQL分库分表篇
    MySQL主从篇
  • 原文地址:https://www.cnblogs.com/Sakits/p/7489487.html
Copyright © 2020-2023  润新知