BZOJ1045(HAOI2008)[糖果傳遞]&&BZOJ3293(Cqoi2011)[分金幣]--中位數

【鏈接】
bzoj1045
bzoj3293

【解題報告】
又是雙倍經驗題
推導如下:
這裏寫圖片描述
這裏寫圖片描述

這裏的B是定值也就是ni=1AiN

就解決了兩題,yeh

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1000005;
int n,a[maxn];
long long ans,sum;
inline int read_()
{
    int sum=0;
    char ch=getchar();
    while (ch<'0'||ch>'9') ch=getchar();
    while (ch>='0'&&ch<='9') sum=sum*10+ch-48,ch=getchar();
    return sum;
}
int abs_(int x)
{
    if (x<0) return -x;
    return x;
}
int main()
{
    freopen("1045.in","r",stdin);
    freopen("1045.out","w",stdout);
    n=read_(); sum=0;
    for (int i=1; i<=n; i++) a[i]=read_(),sum+=a[i];
    sum=sum/n;
    for (int i=1; i<=n; i++) a[i]=a[i]-sum+a[i-1];
    sort(a+1,a+1+n);
    ans=0;
    for (int i=1; i<=n; i++) ans+=abs_(a[i]-a[(n+1)/2]);
    printf("%lld",ans);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章