[BZOJ1045] [HAOI2008] 糖果传递 (中位数)
Description
Solution
这题跟数列的中位数有关,
具体证明见刘汝佳的蓝皮书里
Code
#include <cstdio>
#include <algorithm>
#include <cmath>
#define N 1000010
#define ll long long
using namespace std;
int n;
ll sum,av,Ans,A[N],c[N];
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int main(){
n=read();for(int i=1;i<=n;sum+=(A[i++]=read()));
av=sum/n;
for(int i=1;i<n;++i) c[i]=c[i-1]+A[i]-av;
sort(c,c+n);
ll x1=c[n>>1];
for(int i=0;i<n;++i) Ans+=fabs(x1-c[i]);
printf("%lld\n",Ans);
return 0;
}
[BZOJ1045] [HAOI2008] 糖果传递 (中位数)的更多相关文章
- bzoj1045: [HAOI2008] 糖果传递(数论)
1045: [HAOI2008] 糖果传递 题目:传送门(双倍经验3293) 题解: 一开始想着DP贪心一顿乱搞,结果就GG了 十分感谢hzwer大佬写的毒瘤数论题解: 首先,最终每个小朋友的糖果数量 ...
- bzoj3293 [Cqoi2011]分金币&&bzoj1045 [HAOI2008]糖果传递
Description 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. Inpu ...
- BZOJ1045 [HAOI2008] 糖果传递
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=987654321,表示小朋友的个数 ...
- [BZOJ1045] [HAOI2008] 糖果传递 (贪心)
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=,表示小朋友的个数.接下来n行,每行 ...
- [BZOJ1045][HAOI2008]糖果传递 (环形均分纸牌)
题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 把|s[i]-s[k]|求和即可,s[i]是A的前缀和 s[k]为s数组的中位数时,总值 ...
- BZOJ1045 HAOI2008糖果传递(贪心)
显然最后每个小朋友所拥有的糖果数就是糖果数总和的平均数.设该平均数为t. 环的问题一般断成链,但这个题似乎没有什么很好的办法在枚举断点的时候快速算出答案(我甚至不知道会不会有断点) 于是我们假装把他断 ...
- BZOJ1045 [HAOI2008]糖果传递 && BZOJ3293 [Cqoi2011]分金币
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'000,表示小朋友的个 ...
- 【贪心】bzoj1045: [HAOI2008] 糖果传递
很妙的贪心思考过程 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'0 ...
- [BZOJ1045][HAOI2008]糖果传递 数学
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1045 我们假设每一个小朋友的代价为$x[i]$,每一次都从前面一个小朋友那里拿,这种贪心跟 ...
随机推荐
- Vue.js - Day4
父组件向子组件传值 组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据 <script> // 创建 Vue 实例,得到 ViewModel var vm ...
- js获取农历日期【转】
var CalendarData=new Array(100); var madd=new Array(12); var tgString="甲乙丙丁戊己庚辛壬癸"; var dz ...
- ModuleNotFoundError: No module named 'yaml'
ModuleNotFoundError: No module named 'yaml' 需要安装 pyyaml 包
- ODBC驱动程序丢失解决方法
今天运行SqlDbx连接数据库的时候报错,提示没有找到相应的ODBC driver,打开ODBC管理面板一看,发现里面的驱动程序都不见了.这时想起今天卸载了一个成本核算软件后成这样的,网上搜索一下只需 ...
- IOS 获取.plist文件的数据
@property (nonatomic,strong) NSArray *apps; //获取.plist数据 /**获取plist文件的数组数据*/ -(NSArray *)apps{ if( ...
- caffe 输入图像图像加高斯噪声
这是在frcnn_data_layer的操作,即读图片的操作 if (param.gaussian_noise()) { CHECK(img.type() == CV_8UC3) << & ...
- python剑指offer数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- numpy中生成随机矩阵并打印出矩阵的shape
from numpy import * c=zeros((4,5)) print c.shape print numpy.random.random((2,3))
- BCB:如何在BCB中使用CodeGuard
www.educity.cn 发布者:xjxyj2006 来源:网络转载 发布日期:2013年12月13日 文章评论 发表文章 一. 为什么写这篇东西 自己在使用 BCB5 写一些程序时需要检查很多东 ...
- CUDA线性内存分配
原文链接 概述:线性存储器可以通过cudaMalloc().cudaMallocPitch()和cudaMalloc3D()分配 1.1D线性内存分配 1 cudaMalloc(void**,int) ...