Description

  有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。

Input

  第一行一个正整数n<=,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的
糖果的颗数.

Output

  求使所有人获得均等糖果的最小代价。

Sample Input

4
1
2
5
4

Sample Output

4

HINT

Source

Solution

  设$x[i]$表示$i+1$向$i$传的糖果数,$x[n]$表示$1$向$n$传的糖果数

  $a[1]+x[1]-x[n]=\overline a$
  $a[2]+x[2]-x[1]=\overline a$
  $a[3]+x[3]-x[2]=\overline a$
  $\cdots \cdots$
  $a[n-1]+x[n-1]-x[n-2]=\overline a$
  $a[n]+x[n]-x[n-1]=\overline a$(其实这个式子没用)

  把式子变形:

  $x[1]=\overline a-a[1]+x[n]$
  $x[2]=\overline a-a[2]+x[1]=2*\overline a-a[2]-a[1]+x[n]$
  $x[3]=\overline a-a[3]+x[2]=3*\overline a-a[3]-a[2]-a[1]+x[n]$
  $\cdots \cdots$
  $x[n-1]=\overline a-a[n-1]+x[n-2]=(n-1)*\overline a-\sum_{i=1}^{n-1}a[i]+x[n]$
  $x[n]=n*\overline a-\sum_{i=1}^{n}a[i]+x[n]=0+x[n]$

  设$\displaystyle s[i]=\sum_{j=1}^{i}a[j]-i*\overline a$,则:

  $\displaystyle ans=\sum\mid x[i]\mid\ =\sum\mid s[i]-x[n]\ \mid$

  所以当$x[n]$为$\big\{s[1], s[2], ..., s[n]\big\}$的中位数时答案最小

  题面数据范围是在搞笑的,糖果数在$int$范围,答案在$long\ long$范围,剩下的就没什么难度了

 #include <bits/stdc++.h>
using namespace std;
long long a[], s[];
int main()
{
int n;
long long ave = , ans = ;
scanf("%d", &n);
for(int i = ; i <= n; ++i)
scanf("%lld", a + i);
for(int i = ; i <= n; ++i)
ave += a[i];
ave /= n;
for(int i = ; i <= n; ++i)
s[i] = s[i - ] + a[i] - ave;
sort(s + , s + n + );
for(int i = ; i < n / + ; ++i)
ans += s[n / + ] - s[i];
for(int i = n / + ; i <= n; ++i)
ans += s[i] - s[n / + ];
printf("%lld\n", ans);
return ;
}

  接下来是有爱的双倍经验时间:$BZOJ3293$

[BZOJ1045] [HAOI2008] 糖果传递 (贪心)的更多相关文章

  1. 【BZOJ1045】[HAOI2008] 糖果传递 贪心

    [BZOJ1045][HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正 ...

  2. bzoj1045: [HAOI2008] 糖果传递(数论)

    1045: [HAOI2008] 糖果传递 题目:传送门(双倍经验3293) 题解: 一开始想着DP贪心一顿乱搞,结果就GG了 十分感谢hzwer大佬写的毒瘤数论题解: 首先,最终每个小朋友的糖果数量 ...

  3. bzoj 1045: [HAOI2008] 糖果传递 贪心

    1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1812  Solved: 846[Submit][Stat ...

  4. bzoj3293 [Cqoi2011]分金币&&bzoj1045 [HAOI2008]糖果传递

    Description 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. Inpu ...

  5. 【贪心】bzoj1045: [HAOI2008] 糖果传递

    很妙的贪心思考过程 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'0 ...

  6. BZOJ1045 HAOI2008糖果传递(贪心)

    显然最后每个小朋友所拥有的糖果数就是糖果数总和的平均数.设该平均数为t. 环的问题一般断成链,但这个题似乎没有什么很好的办法在枚举断点的时候快速算出答案(我甚至不知道会不会有断点) 于是我们假装把他断 ...

  7. BZOJ1045 [HAOI2008] 糖果传递

    Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=987654321,表示小朋友的个数 ...

  8. [BZOJ1045][HAOI2008]糖果传递 (环形均分纸牌)

    题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 把|s[i]-s[k]|求和即可,s[i]是A的前缀和 s[k]为s数组的中位数时,总值 ...

  9. BZOJ1045 [HAOI2008]糖果传递 && BZOJ3293 [Cqoi2011]分金币

    Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'000,表示小朋友的个 ...

随机推荐

  1. Sublime编辑器的使用

    Sublime编辑器的使用 我的本地使用环境是Win7下安装的Sublime3编辑器(提取码:nzuw). 1. 新建index.html,在代码编辑区输入<html,然后按下Tab键,可以快速 ...

  2. Linux系统Go开发环境搭建

    Go 语言是由谷歌的科学家开发的,并开源的新语言,被誉为"21世纪的C语言",它的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得 ...

  3. 织梦去除版权中的Power by DedeCms

    找到文件 \include\dedesql.class.php 注释或删除下面代码,大概在588行 $arrs1 = array(0x63,0x66,0x67,0x5f,0x70,0x6f,0x77, ...

  4. [Poj3128]Leonardo's Notebook

    [Poj3128]Leonardo's Notebook 标签: 置换 题目链接 题意 给你一个置换\(B\),让你判断是否有一个置换\(A\)使得\(B=A^2\). 题解 置换可以写成循环的形式, ...

  5. hexo博客简易搭建教程

    什么是Hexo Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页.官网 Hexo安装 安装 在安装Hex ...

  6. 排序算法(Java实现)

    这几天一直在看严蔚敏老师的那本<数据结构>那本书.之前第一次学懵懵逼逼,当再次看的时候,发觉写的是非常详细,非常的好. 那就把相关的排序算法用我熟悉的Java语言记录下来了.以下排序算法是 ...

  7. 编写一个js函数,该函数有一个n(数字类型),其返回值是一个数组,该数组内是n个随机且不重复的整数,且整数取值范围是[2,32]

    首先定义个fn用来返回整数的取值范围: function getRand(a,b){ var rand = Math.ceil(Math.random()*(b-a)+a); return rand; ...

  8. WAMP环境搭建过程中遇到的种种问题

    1,可以选择已经打包好的继承安装包,通常包含apache,mysql,PHP,phpMyadmin.如appserv和wamp. 2,自己分别安装. 第一步:安装mysql,注意设置root对应的密码 ...

  9. Python基于Flask框架配置依赖包信息的项目迁移部署小技巧

    一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...

  10. C# 之三类文件的读写( .XML,.INI 和 .TXT 文件)

    笔记之用,关于三类.xml, .ini, .txt 文件的 C# 读写,请多多指教! 1,第一类:.xml 文件的读写 先贴上xml文件,下面对这个文件进行操作: <?xml version=& ...