Description

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

小朋友个数n 下面n行 ai
Output

求使所有人获得均等糖果的最小代价。
Sample Input
4
1
2
5
4

Sample Output
4
数据规模
30% n<=1000
100% n<=1000000

说难又不难,我对数学题没什么感觉啊

首先,均分纸牌都做过吧(什么,没做过!?百度NOIP2002均分纸牌)

这个只是环形而已,为了把它变成环形,我们要知道a1给了an多少

不妨设a1给an的糖果数为k

那我们的答案就是ans=k+|a1-k-average|+|a1+a2-k-2*average|+|a1+a2+a3-k-3*average|+......+|a1+a2+a3+......+a(n-1)-k-(n-1)*average|

前面的k可以看成|0-k|

所以我求的就是|0-k|+|a1-k-average|+|a1+a2-k-2*average|+|a1+a2+a3-k-3*average|+......+|a1+a2+a3+......+a(n-1)-k-(n-1)*average|的最小值

这个就是一道经典的奥赛题了,k取中位数时最小,排个序就行了

 const
maxn=;
var
b:array[..maxn]of int64;
a:array[..maxn]of longint;
n:longint;
x,k,ans:int64; procedure init;
var
i:longint;
begin
read(n);
for i:= to n do
begin
read(a[i]);
inc(x,a[i]);
end;
x:=x div n;
end; procedure sort(l,r:longint);
var
i,j:longint;
t,y:int64;
begin
i:=l;
j:=r;
y:=b[(l+r)>>];
repeat
while b[i]<y do
inc(i);
while b[j]>y do
dec(j);
if i<=j then
begin
t:=b[i];
b[i]:=b[j];
b[j]:=t;
inc(i);
dec(j);
end;
until i>j;
if i<r then sort(i,r);
if j>l then sort(l,j);
end; procedure work;
var
i:longint;
begin
b[]:=;
for i:= to n do
b[i]:=b[i-]+a[i-]-x;
sort(,n);
k:=b[(n+)>>];
for i:= to n do
inc(ans,abs(b[i]-k));
write(ans);
end; begin
init;
work;
end.

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

  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] 糖果传递

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

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

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

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

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

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

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

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

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

  9. bzoj 1045: [HAOI2008] 糖果传递【瞎搞】

    感觉我的智商可能不够写题解,就直接截了hzwer的blog 地址http://hzwer.com/2656.html #include<iostream> #include<cstd ...

随机推荐

  1. VS中的波浪线

    绿色波浪线: 如果你的代码中出现了绿色的波浪线,说明你的代码语法并没有错误, 只不过提示你有可能会出现错误,但是不一定会出现错误.警告线 红色波浪线: 如果你的代码中出现了红色的波浪线,意味着你的代码 ...

  2. 【程序员的SQL金典】笔记(第6章~第11章)

        第六章 索引与约束   1.索引用来提高数据的检索速度,而约束则用来保证数据的完整性.   2.创建索引 创建索引的SQL 语句是CREATE INDEX,其语法如下: CREATE INDE ...

  3. Oracle的GUID:Raw(16)

    最近用了Oracle作为开发的数据库.以前用Sqlserver的时候用GUID作为主键的(数据类型:uniqueidentifier),Oracle的GUID类型变成RAW(16)了.从数据库读出来R ...

  4. python遍历目录文件脚本的示例

    例子 自己写的一个Python遍历文件脚本,对查到的文件进行特定的处理.没啥技术含量,但是也记录一下吧. 代码如下 复制代码 #!/usr/bin/python# -*- coding: utf-8 ...

  5. Eclipse Code Templates设置

    从工作开始,经历了几个项目的开发,现在的项目一般都是一个团队共同开发,而每个人都有自己的编码习惯,为了统一格式,项目组在项目开发之前都会制定一系列的规范.俗话说约定优于配置,但是在执行过程中往往发现效 ...

  6. JavaScript学习笔记(12)——JavaScript内置对象

    1.Number Javascript只有一种数字类型,可以有小数也可以没有,也可以使用科学计数法. var z=123e-5; // 0.00123 JavaScript 不是类型语言.与许多其他编 ...

  7. poj 2154 Color

    这是道标准的数论优化的polya题.卡时卡的很紧,需要用int才能过.程序中一定要注意控制不爆int!!!我因为爆intWA了好久=_=…… 题目简洁明了,就是求 sigma n^gcd(i,n):但 ...

  8. httpd配置Gzip压缩

    以下设置在 /etc/httpd/conf/httpd.conf 文件末尾加入即可.(不同方式安装的httpd可能主配置文件位置不同,请自行查找) 一.mod_deflate模块:文件压缩 官方文档: ...

  9. CCNA第一讲笔记

    园区网:一组连续的局域网(校园网.企业内部网) 园区网拓扑: 一层楼的PC连接到一台交换机(同一层的PC可以互联):一栋楼的每层的交换机连接到同一台交换机(整栋楼的PC可以互联):每栋楼的交换机连接到 ...

  10. FireDAC如何连接ORACLE数据库

    UniDac对Oracle的Direct连接,不需要安装Oracle客户端dll,deploy时真的是方便又快捷. FireDac连接Oracle,在没有Oracle Client的情况下,是可以连接 ...