Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 4897  Solved: 2457
[Submit][Status][Discuss]

Description

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

Input

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

Output

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

Sample Input

4
1
2
5
4

Sample Output

4
 
毕业被班上委托制作学校录取分布地图。。。没钱拿(눈_눈),我的时间可是10美刀/小时
 
和均分纸牌类似,以绝对值差为贪心原则
设每位小朋友有Ai颗糖,若Xi>0表示第i位小朋友向第i-1位小朋友传递Xi颗糖,若Xi<0表示第i-1位小朋友向第i位小朋友传递Xi颗糖
最终每位小朋友持有ave=(A1+A2...+An)/n颗糖
则:
A1-X1+X2=ave——>X2=X1-(A1-ave)=X1-C1——>C1=A1-ave
A2-X2+X3=ave——>X3=X2-(A2-ave)=X1-C2——>C2=C1+A2-ave
A3-X3+X4=ave——>X4=X3-(A3-ave)=X1-C3——>C3=C2+A3-ave
......
An-Xn+X1=ave——>Xn=Xn-1-(An-ave)=X1-Cn——>Cn=Cn-1+An-ave
于是ans=|X1-C1|+|X2-C2|+|X3-C3|+...+|Xn-Cn|
为了使ans最小,Xi应该最接近Ci的平均数
 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std; #define LL long long const int MAXN=; LL n,mid,ave,ans;
LL A[MAXN],C[MAXN]; int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
cin>>A[i];
ave+=A[i];
}
ave/=n;
for(int i=;i<=n;i++)
C[i]=C[i-]+A[i]-ave;
sort(C+,C+n+);
mid=C[n/+];
for(int i=;i<=n;i++)
ans+=abs(C[i]-mid);
cout<<ans<<endl;
return ;
}

1045: [HAOI2008] 糖果传递的更多相关文章

  1. BZOJ 1045: [HAOI2008] 糖果传递 数学

    1045: [HAOI2008] 糖果传递 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1045 Description 有n个小朋友坐 ...

  2. 【BZOJ 1045】 1045: [HAOI2008] 糖果传递

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

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

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

  4. 【BZOJ】1045: [HAOI2008]糖果传递(中位数)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1045 白书上有讲 没ac的坑点在,数据范围n<=1,000,000 #include < ...

  5. bzoj 1045 [HAOI2008] 糖果传递——设变量推式子

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 费用流TLE. #include<iostream> #include&l ...

  6. 1045: [HAOI2008] 糖果传递 - BZOJ

    Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1.Input 小朋友个数n 下面n行 aiOutput 求使所有人获得均等糖果的 ...

  7. [BZOJ 1045] [HAOI2008] 糖果传递

    题目链接:BZOJ 1045 Attention:数据范围中 n <= 10^5 ,实际数据范围比这要大,将数组开到 10^6 就没有问题了. 我们先来看一下下面的这个问题. 若 n 个人坐成一 ...

  8. BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)

    题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 假设平均数是x,且a1给an了k个(k<0说明是an给a1了-k个),那么总代价就 ...

  9. bzoj 1045 [HAOI2008] 糖果传递 —— 贪心

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1045 好像是贪心...但这是一个环... 看博客:http://hzwer.com/2656 ...

随机推荐

  1. github:当你想要使用VSCODE开心提交代码时,出现Git:git@github.com:Permission denied(publickey)解决方案

    当你想要使用VSCODE开心提交代码时,出现Git:git@github.com:Permission denied(publickey)弹框 图片: 原因:电脑公钥(publickey)未添加至gi ...

  2. C# ThreadLocal

    ThreadLocal的主要作用是让各个线程维持自己的变量. .NET 4.0在线程方面加入了很多东西,其中就包括ThreadLocal<T>类型,他的出现更大的简化了TLS的操作.Thr ...

  3. python入门之sys模块、shutil模块

    sys模块 import sys sys.version 返回python的版本 sys.argv 返回一个以脚本名,和传入的参数作为元素的列表 sys.path 返回一个以当前代码文件路径,pyth ...

  4. notepad++的tab设置为4个空格

    设置--首选项--语言--制表符设置--(勾选上)替换为空格

  5. java实现的各种hash加密

    public class jiami { public static void main(String args[]){ String signString="Thank you!" ...

  6. D. Little Artem and Dance

    题目链接:http://codeforces.com/problemset/problem/669/D D. Little Artem and Dance time limit per test 2 ...

  7. HDU 5908 Abelian Period 可以直接用multiset

    http://acm.hdu.edu.cn/showproblem.php?pid=5908 要求把数组分成k组使得每组中的元素出现次数相同 就是分成k个集合,那么直接用multiset判定就可以 有 ...

  8. Docker | 第六章:构建私有仓库

    前言 上一章节,讲解了利用Dockerfile和commit进行自定义镜像的构建.大部分时候,公司运维或者实施部门在构建了符合公司业务的镜像环境后,一般上不会上传到公共资源库的.这就需要自己搭建一个私 ...

  9. vue3.0学习笔记(一)

    一.搭建工作环境环境 1.从node.js官网下载相应版本进行安装即可 https://nodejs.org/zh-cn/download/,安装完成后在命令行输入  node -v 如果可以查询到版 ...

  10. Spring cloud Eureka 服务治理(搭建服务注册中心)

    服务之类是微服务架构中最为核心的基础模块,它主要用来实现各个微服务实例的自动化注册和发现. 1. 服务注册 在服务治理框架中,通常会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机. ...