题解

T1 购物

https://ac.nowcoder.com/acm/contest/7612/A

显然有一种暴力的方法

把依次把每个置为0,到了最后一个,值是所有的和。

那么可以往前搞,平均分配和。所以如果和不能平均分成  份就是无解。

然后可以发现每个依次操作就是最优策略。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define int long long 
inline int read(){
     int x=0,f=0,ch=getchar();
    while('0'>ch||ch>'9')f^=ch=='-',ch=getchar();
    while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
    return f?-x:x;
}
const int MAX=1e5+5;
int n,T,a[MAX],ans,sum;
signed main(){
    T=read();
    while(T--){
        n=read();sum=ans=0;
        for( int i=1;i<=n;++i)a[i]=read(),sum+=a[i];
        if(sum%n)puts("-1");
        else{
            sum/=n;
            for( int i=1,x;i<=n;++i){
                x=a[i]-sum;ans+=x<0?-x:x;
                a[i]=sum;a[i+1]+=x;
            }
            printf("%lld\n",ans);
        }        
    }

    return 0;
}

全部评论

相关推荐

11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
牛客895077908号:佬 什么双非硕啊
点赞 评论 收藏
分享
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务