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

假设当所有人获得均等的糖果的时候:

  1. 每个人手上的糖果的数量为\(ave\)

  2. 第\(i\)个人初始时的糖果数量为\(A_i\)

  3. 第\(i\)个人给了前一个人\(X_i\)个糖果(如果\(X_i\)是负数,代表前一个人实际上的给了第\(i\)个人\(X_i\)个糖果)

那么对于每个人,都满足等式

\[A_i-X_i+X_{(i+1)\%n}=ave
\]

然后可以列出n条等式

\[A_0-X_0+X_1=ave\\
A_1-X_1+X_2=ave\\
...\\
A_{n-1}-X_{n-1}+X_0=ave\\
\]

最终的答案应该是\(\sum_{i=0}^{n-1}|X_{i}|\)

实际上以上的其中一条等式能够由其他的\(n-1\)条等式得到.

不同的等式只有\(n-1\)条,未知数有\(n\)个,不能直接解.

假设\(X_0\)是已知的值,可以推出所有的\(X\)的值

\[X_1=ave-A_0+X_0=X_0-(A_0-ave)\\
X_2=ave-A_1+X_1=X_1-(A_1-ave)=X_0-(A_0-ave)-(A_1-ave)\\
...\\
X_{n-1}=X_0-\sum_{i=0}^{n-2}(A_i-ave)
\]

定义\(C_k=C_{k-1}-(A_i-ave)\)

那么\(|X_k|=|X_0-C_k|\)

如何让\(\sum_{i=0}^{n-1}|X_{i}|\)变得尽量小,

可以发现,\(|X_0-C_k|\)可以看作是数轴上\(X_0\)和\(C_k\)的距离,

把\(X_0\),\(C_1\),\(C_2\),...,\(C_{n-1}\),都列在一条数轴上,

找到其中的一个点,让这个点到其他所有的点的距离的和最小.

显然,这几个点之中最靠中间的点,就是到其他所有点的距离的和最小的点.

那么这个距离的和就是答案

应该如何假设\(X_0\)的值?

\(X_0\)的含义是第\(0\)个人给第\(n-1\)个人的糖果的数量.

实际上,从第二个人开始,每人给前一个人\(X_i\)个糖果,到最后第\(n-1\)个人手上的糖果数就应该是\(ave\)了.

所以\(X_0\)应该是\(0\).

#include<bits/stdc++.h>

using namespace std;
typedef long long ll; static ll n, sum, ave, mid, ans, a[1100100], c[1100100]; int main()
{
scanf("%lld", &n);
for(ll i = 0; i < n; ++i)
{
scanf("%lld", &a[i]);
sum += a[i];
}
ave = sum/n; c[0] = 0;
for(int i = 1; i < n; ++i)
{
c[i] = c[i-1]+a[i]-ave;
} sort(c, c+n);
mid = c[n/2];
for(int i = 0; i < n; ++i)
ans += abs(c[i] - mid);
printf("%lld\n", ans);
}

HYSBZ-1045 糖果传递的更多相关文章

  1. [BZOJ]1045 糖果传递(HAOI2008)

    放一道数学题. Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=1000000,表示 ...

  2. BZOJ 1045 糖果传递(思维)

    设第i个人给了第i+1个人mi个糖果(可以为负),因为最后每个人的糖果都会变成sum/n. 可以得到方程组 mi-mi+1=a[i+1]-sum/n.(1<=i<=n). 把方程组化为mn ...

  3. bzoj 1045糖果传递 数学贪心

    首先我们假设平均数为ave 那么对于第1个人,我们假设他给第N个人K个糖果,第2个人给1,第3个人给2,第n个人给第n-1个人 那么对于第1个人给完n,第2个人给完1,第一个人不会再改变糖果数了,所以 ...

  4. BZOJ 1045 糖果传递

    奇怪的式子.最后发现取中位数. #include<iostream> #include<cstdio> #include<cstring> #include< ...

  5. 【BZOJ-3293&1465&1045】分金币&糖果传递×2 中位数 + 乱搞

    3293: [Cqoi2011]分金币 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 854  Solved: 476[Submit][Status] ...

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

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

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

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

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

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

  9. BZOJ-1045 糖果传递 数学+递推

    1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2975 Solved: 1327 [Submit][Sta ...

  10. 【数学】【HAOI2008】【BZOJ1045糖果传递】【BZOJ3293分金币】论数学的重要性

    BZOJ1045和BZOJ3293一模一样两道题,在这里我用1045来讲. 1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec  Memory Limit: 162 MB ...

随机推荐

  1. 交通网最短路径长 dp c++

    // // Created by Arc on 2020/4/26. // /* * 城市交通线路,单向通行,道路之间可能有不通,每条连同的路之间都有相应的费用 * 求从起点到终点的最小费用 * * ...

  2. Laravel 定时任务调度 的 Artisan 命令调度

    1.创建命令 php artisan make:command command_name --command=artisan_command_name # Explanation: # command ...

  3. JPA第一天

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springdata"获取视频和教程资料! b站在线视 ...

  4. pandas_时间序列和常用操作

    # 时间序列和常用操作 import pandas as pd # 每隔五天--5D pd.date_range(start = '',end = '',freq = '5D') ''' Dateti ...

  5. PHP timezone_offset_get() 函数

    ------------恢复内容开始------------ 实例 返回相对于 GMT 的时区偏移: <?php$tz=timezone_open("Asia/Taipei" ...

  6. 这届 Showgirl行不行?AI告诉你谁是ChinaJoy上最漂亮的小姐姐

    摘要: CJ开幕,顶着三伏天的酷暑高温,暴走一整天,就为了拍点漂亮小姐姐给大家看看. 一年一度的游戏视觉盛宴又来了! 作为一个游戏动漫控的肥宅,去CJ现场是必须的.除了看看游戏和动漫,各大游戏展台漂亮 ...

  7. 使用ajax发送的请求实现页面跳转

    ajax 本身是不适用于页面跳转的: 可以借助其他方法实现: 1,window.location.href = "/home"; 2,springMVC 返回的modelAndVi ...

  8. Spring 自动装配机制

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  9. 2017面向对象程序设计(Java)第十三周助教工作总结

    时间飞逝,本学期即将接近尾声.不知不觉同学们已经学习java十三个星期了,想必同学们对Java课程体系及内容有了更加深入的理解,也应该摸索出了一套适用于自己的学习方法. 下面我对上周工作做以简单总结: ...

  10. VMware虚拟机磁盘收缩的几种方法

    原文地址:http://www.cnblogs.com/5201351/p/4290401.html 根据下面转载的内容,我在VMware 12.0.0 build-2985596的ubuntu上做试 ...