UVa 11300 找金币

来源:互联网 发布:陕西省中小学网络竞赛 编辑:程序博客网 时间:2024/05/24 05:35

题目:https://cn.vjudge.net/problem/UVA-11300


经过分析,转化为找中位数

#include<bits/stdc++.h>using namespace std;typedef long long int ll;const int maxn=1000000+10;ll A[maxn],C[maxn],tot,M;int main(){    int n;    while(scanf("%d",&n)==1){        tot=0;        for(int i=1;i<=n;i++){            scanf("%lld",&A[i]);            tot+=A[i];        }        M=tot/n;        C[0]=0;        for(int i=1;i<n;i++)            C[i]=C[i-1]+A[i]-M;        sort(C,C+n);        ll x1=C[n/2],ans=0;        for(int i=0;i<n;i++)            ans+=fabs(x1-C[i]);        printf("%lld\n",ans);    }    return 0;}

原创粉丝点击