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. Linux知识体系之磁盘与档案系统管理

    硬盘的物理组成:由许许多多的圆形硬盘盘所组成.宜居硬盘盘能够容纳的数据量,而有所谓的单碟或者多碟. 首先,硬盘里一定会有所谓的磁头(Head)在进行该硬盘上面的读写动作,而磁头是固定在机械手臂上的,机 ...

  2. java json字符串 获取value

    java中可以导入有关json的jar包,但是此jar包又得依赖其他的jar包 ,所以需要导入的包如下: 可在这里下载相关jar包,CSDN下载啥都要钱  讨厌死了  还是这个链接好---云盘 htt ...

  3. php获取中文字符拼音首字母

    //php获取中文字符拼音首字母 function getFirstCharter($str){ if(empty($str)){ return ''; } $fchar = ord($str{0}) ...

  4. 基于netty框架的Socket传输

    一.Netty框架介绍 什么是netty?先看下百度百科的解释:         Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开 ...

  5. windows上nginx的安装和配置

    http://www.cnblogs.com/Li-Cheng/p/4399149.html http://www.cnblogs.com/huayangmeng/archive/2011/06/15 ...

  6. CentOs环境下给PHP7.0安装fileinfo扩展

    由于项目搭建处于一个初步阶段,由于环境的不成熟出现过一系列的问题是难免的,在关于文件操作的程序中,报出一个缺少扩展的错误,已经解决~ 看一下官方给出的说明,http://php.net/manual/ ...

  7. properties基本用法

    package control; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io. ...

  8. 理解Activity.runOnUiThread()

    这是一篇译文(中英对照),原文链接:Understanding Activity.runOnUiThread() When developing Android applications we alw ...

  9. UVA - 1632 Alibaba 区间dp

    题意:给定n个点,其中第i个点的坐标是,且它会在秒后消失.Alibaba可以从任意位置出发,求访问完所有点的最短时间.无解输出No solution. 思路:表示访问完区间后停留在i点的最短时间,表示 ...

  10. Kettle参数化配置

    Kettle参数化配置 在做系统化的Kettle实现方案,我们基本要定义一些不变的参数,在整个生命周期中使用,或者设置一些特定的参数,在一些特定的JOB中使用.参数化配置有利用我们Kettle实现规范 ...