1. 程式人生 > 其它 >[HAOI2008]糖果傳遞(貪心+公式推導)

[HAOI2008]糖果傳遞(貪心+公式推導)

傳送門

這道題其實相當於 均分紙牌 的一個進階。

在均分紙牌中我們是這樣做的:讓每一堆都往左傳。

讓每個人的數量都減去平均數,結果可以經過簡單的數學推導得

其中S[i]是新陣列的字首和。這是均分紙牌問題的通用公式。

然後這道題,我們可以沿用這樣的思想進行數學推導

中位數證明(來自洛谷題解):

#include<bits/stdc++.h>
#define N 1000003
#define LL long long
using namespace std;
LL a[N],c[N];
int main()
{
    int n;
    scanf("%d",&n);
    LL sum
=0; for(int i=1;i<=n;++i) { scanf("%d",&a[i]); sum+=a[i]; } LL ave=sum/n; for(int i=1;i<=n;++i) { c[i]+=a[i]; c[i]+=c[i-1]; c[i]-=ave; } sort(c+1,c+1+n); LL mid=c[(n+1)/2];//mid即x1 LL ans=0; for(int i=1;i<=n;++i) ans
+=abs(mid-c[i]); printf("%lld\n",ans); }
View Code