【bzoj1465/bzoj1045】糖果传递 数论
题目描述
老师准备了一堆糖果, 恰好n个小朋友可以分到数目一样多的糖果. 老师要n个小朋友去拿糖果, 然后围着圆桌坐好, 第1个小朋友的左边是第n个小朋友, 其他第i个小朋友左边是第i-1个小朋友. 大家坐好后, 老师发现, 有些小朋友抢了很多的糖果, 有的小朋友只得到了一点点糖果, 甚至一颗也没有 , 设第i个小朋友有ai颗糖果. 小朋友们可以选择将一些糖果给他左边的或者右边的小朋友, 通过”糖果传递”最后使得每个小朋友得到的糖果数是一样多的, 假设一颗糖果从一个小朋友传给另一个小朋友的代价是1, 问怎样传递使得所耗的总代价最小.
输入
第一行一个正整数n,表示小朋友的个数. n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.
输出
输出只有一个数, 表示最小代价.
样例输入
4
1
2
5
4
样例输出
4
题解
数论?! Orz http://hzwer.com/2656.html
设第i个小朋友给第i-1个小朋友的糖果数为xi(第1个给第n个),
由于每个小朋友最后剩余的糖果数都是平均数ave,那么有:
a1-x1+x2=ave
a2-x2+x3=ave
……
an-xn+x1=ave
可以看出最后一个方程可以由前n-1个推出来,是多余的,于是怒删。
将这里的前i个方程加起来,可以发现其中的变量只包含xi+1和x1,即xi+1=ave*i-∑aj (1≤j≤i),即xi=ave*(i-1)-∑aj (1≤j<i)
为了方便,令ci=∑(aj-ave) (1≤j≤i),就变成了xi=x1-c(i-1)。
所求为|x1|+|x2|+……+|xn|=|x1-0|+|x1-c1|+|x1-c2|+...+|x1-c(i-1)|
根据某定理,x1等于0、c1、c2、...、c(i-1)的中位数时所求最小。
然后加一遍就行了。
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
ll a[1000010] , c[1000010];
int main()
{
int n , i;
ll ave = 0 , ans = 0;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ )
scanf("%lld" , &a[i]) , ave += a[i];
ave /= n;
for(i = 2 ; i <= n ; i ++ )
c[i] = c[i - 1] + a[i] - ave;
sort(c + 1 , c + n + 1);
for(i = 1 ; i <= n ; i ++ )
ans += abs(c[i] - c[(n + 1) >> 1]);
printf("%lld\n" , ans);
return 0;
}
【bzoj1465/bzoj1045】糖果传递 数论的更多相关文章
- bzoj1045: [HAOI2008] 糖果传递(数论)
1045: [HAOI2008] 糖果传递 题目:传送门(双倍经验3293) 题解: 一开始想着DP贪心一顿乱搞,结果就GG了 十分感谢hzwer大佬写的毒瘤数论题解: 首先,最终每个小朋友的糖果数量 ...
- 【数学】【HAOI2008】【BZOJ1045糖果传递】【BZOJ3293分金币】论数学的重要性
BZOJ1045和BZOJ3293一模一样两道题,在这里我用1045来讲. 1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB ...
- bzoj1045 糖果传递
escription 老师准备了一堆糖果, 恰好n个小朋友可以分到数目一样多的糖果. 老师要n个小朋友去拿糖果, 然后围着圆桌坐好, 第1个小朋友的左边是第n个小朋友, 其他第i个小朋友左边是第i-1 ...
- BZOJ-1045 糖果传递 数学+递推
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2975 Solved: 1327 [Submit][Sta ...
- 【BZOJ1045】[HAOI2008]糖果传递
[BZOJ1045][HAOI2008]糖果传递 题面 bzoj 洛谷 题解 根据题意,我们可以很容易地知道最后每个人的糖果数\(ave\) 设第\(i\)个人给第\(i-1\)个人\(X_i\)个糖 ...
- 【BZOJ1045】糖果传递(贪心)
[BZOJ1045]糖果传递(贪心) 题面 BZOJ 洛谷 题解 秉承者娱乐精神,我们必须写一个费用流,并且相信信仰跑不过去. 于是写了一个\(zkw\)费用流如下:(您可以无视此份代码) #incl ...
- 【BZOJ1045】[HAOI2008] 糖果传递 贪心
[BZOJ1045][HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正 ...
- BZOJ1465: 糖果传递
1465: 糖果传递 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 277 Solved: 105[Submit][Status] Descriptio ...
- bzoj3293 [Cqoi2011]分金币&&bzoj1045 [HAOI2008]糖果传递
Description 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. Inpu ...
随机推荐
- 构建高可靠hadoop集群之2-机栈
本文主要参考 http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/RackAwareness.html had ...
- MySQL的日志相关内容
本篇文章介绍一下mysql的备份和日志,由于备份时需要用到日志,所以在讲备份前,如果日志内容篇幅过长,将会把日志和备份分开单独来讲,先简单介绍一下mysql的日志相关内容. MySQL日志 日志是my ...
- MySQL单表数据查询(DQL)
数据准备工作: CREATE TABLE student( sid INT PRIMARY KEY AUTO_INCREMENT, sname ), age TINYINT, city ), scor ...
- 一次 group by + order by 性能优化分析
一次 group by + order by 性能优化分析 最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家 ...
- C# 实现窗口无边框,可拖动效果
#region 无边框拖动效果 [DllImport("user32.dll")]//拖动无窗体的控件 public static extern bool ReleaseCaptu ...
- List集合中的对象比较,取出不同对象
今天在做金碟系统与我们系统的对接的时候需要做一个客户同步 在同步时,需要比较对象,对查询出的数据库的数据进行比较 for(int i=0;i<list2.size();i++){ if(! li ...
- node获取头信息数据
req.fresh req.stale var version = 100; app.get('/test',function(req,res){ res.set('etag',version); i ...
- Linux中的目录功能(Red Hat 7)
目录的基本功能: /bin:存放普通用户使用的命令 /sbin:存放管理员可以执行的命令 /home:存放普通的家目录 如张三家目录为/home/zhangsan /root:管理员的家目录 /etc ...
- 【NOIP-2017PJ】图书管理员
图书管理员 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图 书编码恰好以读者的需 ...
- 45-Identity MVC:注册逻辑实现
1-注册页Register.cshtml <h3>Register</h3> @model MvcCookieAuthSample.ViewModel.RegisterView ...