bzoj1045 糖果傳遞

Description

有n個小朋友坐成一圈,每人有ai個糖果。每人只能給左右兩人傳遞糖果。每人每次傳遞一個糖果代價為1。

Input

第一行一個正整數nn<=1'000'000,表示小朋友的個數.
接下來n行,每行一個整數ai,表示第i個小朋友得到的糖果的顆數.

Output

求使所有人獲得均等糖果的最小代價。

Sample Input

4
1
2
5
4

Sample Output

4
這道題讓我想到了白書上面的相似的一道題:

UVA11300 Spreading the Wealth

A Communist regime is trying to redistribute wealth in a village. They have have decided to sit everyone around a circular table. First, everyone has converted all of their properties to coins of equal value, such that the total number of coins is divisible by the number of people in the village. Finally, each person gives a number of coins to the person on his right and a number coins to the person on his left, such that in the end, everyone has the same number of coins. Given the number of coins of each person, compute the minimum number of coins that must be transferred using this method so that everyone has the same number of coins.

Input

There is a number of inputs. Each input begins with n (n < 1000001), the number of people in the village. n lines follow, giving the number of coins of each person in the village, in counterclockwise order around the table. The total number of coins will fit inside an unsigned 64 bit integer.

Output

For each input, output the minimum number of coins that must be transferred on a single line.

Sample Input

3
100
100
100
4
1
2
5
4

Sample Output

0
4
題意:n個人圍成一圈,每個人都有一些硬幣,,每個人只能給左右相鄰的人硬幣,問最少交換幾個硬幣,使每個人硬幣一樣多。
我第一反應:費用流。第二反應:費用流。第三反應:費用流。
然后看uva11300題解:
首先,最終每個人金幣數量可以計算出來,我們用M表示每個人最后擁有的金幣數。
我們對于第i個人可以看作他給了他左邊的人xi個金幣(負數表示反向傳遞),他右邊的人給了他xi+1個金幣,假設他一開始擁有的金幣數量為Ai,那么有Ai-xi+xi+1=M。
如果我們繼續列下去就會變成這樣:
A1-x1+x2=M -> x2=M-A1+x1?-> ?令C1=A1-M -> x2=x1-C1
A2-x2+x3=M -> x3=M-A2+x2=2*M-A1-A2+x1 -> ?令C2=A1+A2-2*M -> x3=x1-C2
A3-x3+x4=M -> x4=M-A3+x3=3*M-A1-A2-A3+x1?-> ?令C3=A1+A2+A3-3*M?-> x4=x1-C3
.......
那么我們就會得到n個等式,但是我們發現我們可以用這n個等式中的任意n-1個去變換得到最后剩下那個等式。
因為我們知道 $\sum A_i =M \times n $ ,那么最后一個等式Cn=0,就是x1=x1
也就是說,最后那個等式是沒有用的,我們只會用到n-1個等式。那么這n-1個等式可以用來做什么呢,我們怎樣才能求得 $ \sum abs(x_i) $ 最小值呢?
$ \sum abs( x_i ) = abs( x_1 )+abs( x_2 )+abs( x_3 )+......+abs( x_n )=abs( x_1 ) +abs(x_1-C_1) +abs(x_1- C_2)+ ......+abs(x_1-C_{n-1})$
由于Ci是可以直接計算出來的,可以當作常數,所以說這個等式相當于是求一個最優的x1,使得數軸上x1到Ci距離和最小,而這個距離和就是我們所求的答案。
最后問題轉化成求數軸上一個點到所有已知的點最小距離,相信在小學(或是初中)數學老師都講過,這樣的點就是中位數啦。
然后就直接算出C,然后算中位數與其他的所有的點的距離。
bzoj1045 代碼:
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=1e6+10;
long long n,tot,ans,c,A[maxn],C[maxn];long long aa;char cc;
long long read() {aa=0;cc=getchar();while(cc<'0'||cc>'9') cc=getchar();while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();return aa;
}int main() {n=read();for(int i=1;i<=n;++i) A[i]=read(),tot+=A[i];tot/=n;for(int i=1;i<n;++i) C[i]=A[i]-tot+C[i-1];sort(C+1,C+n+1);//還有一個C[i]為0的 for(int i=1;i<=n;++i) ans+=abs(C[i]-C[(n+1)>>1]);printf("%lld",ans);return 0;
}

  

轉載于:https://www.cnblogs.com/Serene-shixinyi/p/7594077.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282313.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第9章節--client對象模型和REST APIs概覽 client對象模型API范圍...

BEGINNING SHAREPOINT 2013 DEVELOPMENT 第9章節--client對象模型和REST APIs概覽 client對象模型API范圍 本章之前提到過。client對象模型應用中一個不足就是缺乏對SP APIs和訪問功能的支持不足。轉載于:https://www.cnblogs.com/yutingliuyl/p/6748382.html

為.NET應用添加截圖功能

本文介紹了 .NET 實現截圖功能的思路和過程&#xff0c;如果你僅想了解最后的解決方案&#xff0c;可以直接查看文章末尾。截圖的功能我們應該都經常使用&#xff0c;在開發軟件時&#xff0c;我們有時也或多或少需要提供這方面的功能&#xff0c;無論是為用戶更方便提供遠程診…

K8S集群Master高可用實踐

本文將在前文基礎上介紹k8s集群的高可用實踐&#xff0c;一般來講&#xff0c;k8s集群高可用主要包含以下幾個內容&#xff1a;1、etcd集群高可用2、集群dns服務高可用3、kube-apiserver、kube-controller-manager、kube-scheduler等master組件的高可用 其中etcd實現的辦法較為…

[轉載]智能科普:VR、AR、MR的區別

智能科普&#xff1a;VR、AR、MR的區別 http://news.zol.com.cn/553/5534833.html news.zol.com.cn 2015-11-23 16:00近日&#xff0c; 獲得谷歌5億美元融資的技術公司Magic Leap在WSJD展會中放出了一段實錄視頻&#xff0c;引起不小騷動。如今&#xff0c;也有媒體稱他們為MR公…

PHP項目中,記錄錯誤日志

一、場景介紹&#xff1a; 環境&#xff1a;LNMP 我們通常是通過nginx的錯誤日志來分析分錯的&#xff0c;也就是我們在各個server中定義的error_log。 比如下面這樣&#xff0c;就是將錯誤日志定義在/etc/nginx/logs/error/www.xiaobudiu.top.log&#xff0c;發生錯誤&#xf…

持續集成指南:GitLab 的 CI/CD 工具配置與使用

1前言寫代碼這項工作&#xff0c;本質就是將工作自動化&#xff0c;減少手工操作提供效率&#xff0c;因為人的本質都是懶狗&#xff0c;程序員也不能例外&#xff0c;為了各種意義的效率提升&#xff08;懶&#xff09;&#xff0c;我們需要持續集成工具&#xff0c;將代碼測試…

php 錯誤日志 redis' already loaded in Unknown on line 0

環境介紹&#xff1a;LNMP 報錯信息&#xff1a;注&#xff1a;這個php_errors.log 是我在php.ini 中定義的錯誤日志路徑 問題原因&#xff1a; 報錯信息給出的意思是&#xff1a;redis和memcache 模塊已經加載過問題解決&#xff1a; php加載模塊有兩種方式&#xff0c;一種是…

第一周作業

我的Git賬號&#xff1a;AI1452349541 和代碼圖 這是我在電腦和手機上下的網易有道詞典 &#xff0c; C也下了。 ***學習內容總結*** 感覺任務并不是很難&#xff0c;有些任務沒完成是 因為還沒買電腦不好弄&#xff0c;下周電腦一定到位。 ***遇到的問題…

升級MariaDB為10.1版本

2019獨角獸企業重金招聘Python工程師標準>>> CentOS中升級mariadb為10.1GA版本。 1、如果有&#xff0c;停止服務 systemctl stop mariadb 2、卸載原來的數據庫服務 yum -y remove mari* 3、刪除數據庫文件 rm -rf /var/lib/mysql/* 4.創建/etc/yum.repos.d/MariaDB…

第一篇文章

第一次寫博客。歡迎各位大牛捧場轉載于:https://www.cnblogs.com/clnchanpin/p/6753665.html

羊了個羊的Ignite大會又來啦

據說最近羊了個羊非常火啊&#xff5e;可惜沒有時間精力研究。不過&#xff0c;薅微軟羊毛的機會我是一定不會錯過的&#xff0c;這不&#xff0c;薅羊毛的機會來了&#xff0c;哈哈哈。作為經常薅微軟羊毛的老司機&#xff0c;今天收到了微軟的郵件&#xff0c;告知有新的羊毛…

清除谷歌瀏覽器的dns緩存

谷歌地址欄輸入&#xff1a; chrome://net-internals/#dns出現下面界面&#xff1a;找到DNS選項&#xff0c;選擇clear host cache即可效果&#xff1a;這樣&#xff0c;谷歌瀏覽器上的dns緩存就清理掉了。應用場景&#xff1a; 本地環境和線上環境用的是一個host&#xff0c;這…

生產YUM源搭建

企業內部YUM源搭建轉載于:https://www.cnblogs.com/xiangtanglaojing/p/7603581.html

什么樣的代碼稱得上是好代碼?

“軟件自有其美感所在” --《重構》圖片&#xff1a;崇禮瀚海梁的山花 拍攝于2022年8月13日 攝影師&#xff1a;劉先生這篇內容寫作于4年前&#xff08;2018年&#xff09;&#xff0c;是自己多年軟件開發工作的一點感悟&#xff0c;現在看來雖有偏頗&#xff0c;但總體思想方…

Coding and Paper Letter(十四)

2019獨角獸企業重金招聘Python工程師標準>>> 資源整理。 1 Coding: 1.R語言包ungeviz&#xff0c;ggplot2的拓展包&#xff0c;專門用來作不確定性的可視化。 ungeviz 2.計算機圖形學相關開源項目。 計算機圖形學光線追蹤開源項目C源碼。 computer graphics ray tra…

QBC運算符含義

HQL運算符 QBC運算符 含義 Restrictions.eq() 等于 <> Restrictions.not(Exprission.eq()) 不等于 > Restrictions.gt() …

eclipse安裝反編譯插件

一、下載插件 1、官方地址&#xff1a;http://jd.benow.ca/ 2、百度網盤&#xff1a;http://pan.baidu.com/s/1eSJ7Tiq 密碼&#xff1a;sr6p 二、打開eclipse&#xff0c;點擊“Help > Install New Software” 三、Name填&#xff1a;JD-Eclipse Update Site&#xff08;可…

PHP 項目中緩存的多種應用實現

一、CDN緩存原理和介紹 1、各地部署多套靜態存儲服務&#xff0c;本質上是空間成本換時間 2、CDN是域名和真實服務器中間的一個環節&#xff0c;添加cdn節點后&#xff0c;用戶訪問時&#xff0c;自動選擇最近的節點內容&#xff0c;不存在再請求原始服務器 3、CDN本質上是一種…

【tomcat】servlet原理及其生命周期

1.什么是servlet&#xff1f; Servlet&#xff08;Servlet Applet&#xff09;&#xff0c;全稱Java Servlet,是用Java編寫的服務器端程序。而這些Servlet都要實現Servlet這個接口。其主要功能在于交互式的瀏覽和修改數據&#xff0c;生成動態Web內容。Servlet運行于支持Java的…

實現一個監控 IP 的 windows 服務

實現一個監控 IP 的 windows 服務Intro我們公司的 VPN 用自己的電腦連公司的臺式機的時候需要用 IP 地址&#xff0c;有一次嘗試去連的時候發現連不上&#xff0c;第二天到公司發現 IP 變掉了&#xff0c;不是之前連的 IP 了&#xff0c;于是就想寫一個簡單 Windows 服務來監控…