loj10010糖果传递
题目描述
原题来自:HAOI 2008
有 n 个小朋友坐成一圈,每人有 a_i 颗糖果。每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为 1 。求使所有人获得均等糖果的最小代价。
输入格式
第一行有一个整数 n ,表示小朋友个数;
在接下来 n 行中,每行一个整数 a_i。
输出格式
输出使所有人获得均等糖果的最小代价。
样例
样例输入
4
1
2
5
4
样例输出
4
数据范围与提示
对于 30% 的数据,n<=1000;
对于 100% 的数据,n<=1e6,保证答案可以用 64 位有符号整数存储。
__________________________________________
很经典的题目,最初是在蓝书上看到的。
n个孩子围坐在一起,每个孩子手中有糖,通过传递让糖果平均。
每个孩子有a_i个糖果,传给下一个孩子b_i个糖果,使他们平均。当然可能是下一个孩子传给他,那么b_i为负数。
这样就是求sum(abs(b_i))
平均值ave是可以求出来的,那么
a_1+b_n-b_1=ave
a_2+b_1-b_2=ave
a_3+b_2-b_3=ave
...
a_n+b_n-1+b_n=ave
变形的
b_1=a_1+b_n-ave
b_2=a_2+b_1-ave
b_3=a_3+b_2-ave
......
b_n=a_n+b_n-1-ave
其中a_i和ave已知,设a_i-ave为c_i,上面的式子变为:
b_2=b_1-c_2
b_3=b_2-c_3=b_1-c_2-c_3
...
b_n=b_1-c_2-c_3-c_4-...-c_n
b_1=b_1-c_2-c_3-c_4-...-c_n-c_1
我们要求的是等号左侧的所有b的绝对值的最小值,也就是求等号右侧所有式子的绝对值和的最小值,而右侧只有b1是未知量。那么式子就变成了
|x-d|
x是未知量,而d是已知量。
那么就成了数轴上x点到d点的距离。
而d有好多个,求得是x。所以就变成了,求数轴上某一点数轴上n个已知点的距离之和最小。
这就用到了中位数。也就是把所有已知点排序,中间点的位置就是x点。
(奇数个已知点就是中间的,偶数个已知点,中间两个点间的所有的都符合要求)
__________________________________________

1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1e6+10;
4 long long sz[maxn],ssz[maxn];
5 long long n,ave;
6 inline long long jdz(long long x,long long y)
7 {
8 return x>y?x-y:y-x;
9 }
10 int main()
11 {
12 scanf("%lld",&n);
13 for(int i=1;i<=n;++i)
14 {
15 scanf("%lld",&sz[i]);
16 ave+=sz[i];
17 }
18 ave/=n;
19 for(int i=1;i<=n;++i)
20 {
21 sz[i]-=ave;
22 ssz[i]=sz[i]+ssz[i-1];
23 }
24 sort(ssz+1,ssz+n+1);
25 long long b=ssz[(1+n)>>1];
26 long long ans=0;
27 for(int i=1;i<=n;++i)
28 ans+=jdz(b,ssz[i]);
29 cout<<ans;
30 return 0;
31 }
loj10010糖果传递的更多相关文章
- bzoj1045 糖果传递
escription 老师准备了一堆糖果, 恰好n个小朋友可以分到数目一样多的糖果. 老师要n个小朋友去拿糖果, 然后围着圆桌坐好, 第1个小朋友的左边是第n个小朋友, 其他第i个小朋友左边是第i-1 ...
- 【BZOJ-3293&1465&1045】分金币&糖果传递×2 中位数 + 乱搞
3293: [Cqoi2011]分金币 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 854 Solved: 476[Submit][Status] ...
- BZOJ-1045 糖果传递 数学+递推
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2975 Solved: 1327 [Submit][Sta ...
- BZOJ 1045: [HAOI2008] 糖果传递 数学
1045: [HAOI2008] 糖果传递 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1045 Description 有n个小朋友坐 ...
- 【BZOJ 1045】 1045: [HAOI2008] 糖果传递
1045: [HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n& ...
- bzoj 1045: [HAOI2008] 糖果传递 贪心
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1812 Solved: 846[Submit][Stat ...
- BZOJ1465: 糖果传递
1465: 糖果传递 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 277 Solved: 105[Submit][Status] Descriptio ...
- bzoj3293 [Cqoi2011]分金币&&bzoj1045 [HAOI2008]糖果传递
Description 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. Inpu ...
- P2512 [HAOI2008]糖果传递&&P3156 [CQOI2011]分金币&&P4016 负载平衡问题
P2512 [HAOI2008]糖果传递 第一步,当然是把数据减去平均数,然后我们可以得出一串正负不等的数列 我们用sum数组存该数列的前缀和.注意sum[ n ]=0 假设为链,那么可以得出答案为a ...
随机推荐
- easyui获取table列表中所有数据组装成json格式发送到后台
jsp代码 var rows =$('#findAllRolestable').datagrid('getSelections'); var result = JSON.stringify(rows) ...
- 在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了。
前言 在项目中随手把haseMap改成了currenHaseMap差点被公司给开除了. 判断相等 字符串判断相等 String str1 = null; String str2 = "jav ...
- Java 从匿名内部类到Lambda表达式
匿名内部类和Lambda表达式有很多类似之处,首先都是在使用的时候才对接口进行实现,只是Lambda接口中只能由一个需要被实现的方法. 所有的Lambda表达式都可以 由匿名内部类改写: interf ...
- Hadoop集群模式安装出现的若干问题
一.域名解析问题 域名解析暂时失败问题 vim /etc/sysconfig/network 查看主机名 vim etc/hosts 配置IP地址与主机名 192.168.60.132 centos ...
- noip2016自测报告
随便测了一下2016的提高组,发现自己还是太菜了... day1 T1:玩具谜题 一个模拟题,打挂了,只有95分,错的很傻逼 code: #include<bits/stdc++.h> u ...
- Ubuntu和UOS+mips64l龙芯处理器安装编译Openssl
1.下载openssl开发包文件,我这里下载的是openssl-1.1.1f.tar.gz:并放在/data/home/dengchaoqun/openssl1.1.1目录下 2.终端切换到当前目录下 ...
- std::thread线程库详解(2)
目录 目录 简介 最基本的锁 std::mutex 使用 方法和属性 递归锁 std::recursive_mutex 共享锁 std::shared_mutex (C++17) 带超时的锁 总结 简 ...
- 入门Kubernetes -基础概念
一.Kubernetes概述 Kubernetes ,又称为 k8s(首字母为 k.首字母与尾字母之间有 8 个字符.尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是 ...
- shelll中test命令的使用【转】
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于 ...
- 一文带你探究Sentinel的独特初始化
摘要:本系列通过作者对Redis Sentinel源码的理解,详细说明Sentinel的代码实现方式. Redis Sentinel 是Redis提供的高可用模型解决方案.Sentinel可以自动监测 ...