貪心 公式推導 思路

2021-09-02 22:04:48 字數 1386 閱讀 9645

submit page   time limit: 1 sec     memory limit: 128 mb     submitted: 11     solved: 8    

zj開公司,年年榮登315晚會。

315當天,一大幫員工來zj公司討工資。(顯然又欠工資了囧)。

員工們圍成乙個圈,把zj圍在中間,打算用暴力手段討取工資。

機智如zj早就料到這種情況了,所以zj身上帶了錢。為了拖延時間,zj故意把錢不平衡地分給每個員工,這樣,員工們就會因為分錢的事耽誤時間。而zj就可以乘機逃跑了。。。

員工們的錢不平衡了,他們很不高興。所以他們要開始交換錢。i的錢只能給i+1或者i-1。(1號的可以給n號,n號也可以給1號)。傳遞一塊錢的時間是1s。

qqtan作為員工首領見狀,立刻想出了辦法,使傳遞的錢的數量最少(每秒鐘只允許乙個人傳遞1塊錢,zj給錢的時間不算在內)。

你作為zj公司的首席程式猿,需要告訴zj,他有多少時間用來逃跑。

第一行n,員工數量 第2行到n+1行,整數a[i] 每個員工已經拿到的錢。 n<=1000000

乙個整數,zj還有多久可以逃跑。

412

54

4
詳見白書題目。

設 i 初始金錢為 ai,可算出每人應得的平均錢數m。

設 xi 為 i 給 i-1 的金幣數,那麼就可以列出n-1個有效方程(第n個可以由前n-1個推導出來):

ai + x(i+1) - xi = m;( 1 <= i x2 = x1 - a1 + m = x1 - c1(c1=a1-m,ci = (a1+……+ai)- i*m);

xi+1 = xi - ci;( 1 <= i < n )

所求應為|x1|+……+|xi|+……+|xn| = |x1| + |x1-c1| +……+ |x1-c(i-1)| +…… + |x1-c(n-1)|,可看作n個點到x1的距離和,x1應為其中某點,使其最小即找0,c1……c(n-1)的中位數。

很玄妙。

#include #include #include using namespace std;

const int maxn=1e6+10;

int n;

long long m=0;

long long a[maxn],c[maxn];

long long ans=0;

int main()

m/=n;

c[0]=0;

for(int i=1;isort(c,c+n);

long long x=c[n/2];

for(int i=0;iprintf("%lld\n",ans);

return 0;

}

Fibonacci Numbers公式推導(數論)

題目 fibonacci numbers 簡介 如果斐波那契數小於8位的就輸出這個數,大於8位的就輸出前四位,以及後四位 公式部分 fibonacci求和公式 f n 15 1 52 n 1 52 n a0 0,a 1 1 beginf left n right dfrac left left df...

Catalan數公式推導

如何把下列遞迴公式 f n f 0 f n 1 0 f 1 n 1 1 f 2 f n 1 2 f n 1 0 f 0 轉化為 f n c 2n,n n 1 可以利用母函式 發生函式 令g x f 0 f 1 x f 2 x 2 那麼遞迴公式左邊就是g x 的n次項係數。右邊是g x 2的n 1次項...

推導座標旋轉公式

在 flash actionscript 3.0 動畫教程 一書中有乙個旋轉公式 x1 cos angle x sin angle y y1 cos angle y sin angle x 其中x,y表示物體相對於旋轉點旋轉angle的角度之前的座標,x1,y1表示物體旋轉angle後相對於旋轉點的...