[HAOI2008]糖果传递 结论题
題目描述
有\(n(n<1000000)\)個小朋友坐成一圈,每人有\(a_i\)個糖果。每人只能給左右兩人傳遞糖果。每人每次傳遞一個糖果代價為\(1\),求使所有人糖果數(shù)相等的最小代價。
暴力的做法比較顯然,有\(30\)分,這里就不再贅述了。
推一波式子:先考慮一條鏈的情況,\(a[i]\)為原數(shù)組,\(b[i]\)為\(a[i]\)每項分別減掉平均數(shù)的數(shù)組,\(sum1[i],sum2[i]\)分別為\(a[i],b[i]\)的前綴和數(shù)組,\(ave\)為平均數(shù)。則\(ans\)可表示為\(\sum\limits_{i=1}^{n}|i*ave-sum1[i]|\),再化簡得到\(\sum\limits_{i=1}^{n}|sum2[i]|\)。然后是環(huán)形的情況,斷環(huán)為鏈的位置不同,會變化的量就是前綴和數(shù)組。假設斷環(huán)的位置為\(p\),則前綴和變?yōu)?span id="ozvdkddzhkzd" class="math inline">\(sum2[k+1]-sum2[k],sum2[k+2]-sum2[k]...\),減掉重復部分就是\(sum2[k]-sum2[1],sum2[k]-sum2[2]...\),所以答案就是\(\sum\limits_{i=1}^{n}|sum2[k]-sum2[i]|\),結(jié)論就是\(sum2[k]\)為中位數(shù)時是最優(yōu)的(證明以后再補吧)。照著式子寫代碼就好了。
轉(zhuǎn)載于:https://www.cnblogs.com/dummyummy/p/9795849.html
總結(jié)
以上是生活随笔為你收集整理的[HAOI2008]糖果传递 结论题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 的makefile文件实例
- 下一篇: 算法笔记(个人用)(不定期更新)