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後相對於旋轉點的...