有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. ken桑带你读源码 之scrapy scrapy\extensions

    logstats.py 爬虫启动时 打印抓取网页数   item数 memdebug.py 爬虫结束 统计还被引用的内存 也就是说gc 回收不了的内存   memusage.py 监控爬虫 内存占用  ...

  2. PHP mysqli_select_db() 函数

    更改连接的默认数据库: 删除数据库 <?php高佣联盟 www.cgewang.com // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_con ...

  3. 死磕HashMap

    前言 HashMap是Java中最常用的集合类框架,也是Java语言中非常典型的数据结构,同时也是我们需要掌握的数据结构,更重要的是进大厂面试必问之一. 数组特点 存储区间是连续,且占用内存严重,空间 ...

  4. react-ts模板2.0

    最新整理的react模板2.0 - react 16.12.0 - react-router - redux,redux-thunk - hooks,typescript - antd v4,sass ...

  5. GitHub 热点速览 Vol.31:在?跑个 GitHub 评分如何?

    摘要:个性化的 GitHub README 自从 7 月上线之后一直风靡在各大技术平台,当中最有意思的莫过于代表你技术的 GitHub Readme Stats 了,除了能显示你提交的 pr.comm ...

  6. 验证Kubernetes YAML的最佳实践和策略

    本文来自Rancher Labs Kubernetes工作负载最常见的定义是YAML格式的文件.使用YAML所面临的挑战之一是,它相当难以表达manifest文件之间的约束或关系. 如果你想检查所有部 ...

  7. 聊聊WindowServer那些事!

    前言说明 使用工具:VS2019 思考为什么要使用WindowServer,它能做什么了?(后面解答) 一:什么是WindowServer?(我们做的是一个什么东西?)         Microso ...

  8. 14、Cahin of Responsibility 责任链 COR设计模式

    1.责任链模式 chain of responsibility 责任链模式 责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果某 ...

  9. Vulhub Docker环境部署

    1:安装Linux 2:安装Docker : curl -s https://get.docker.com/ | sh 3:安装Docker-compose curl -s https://boots ...

  10. java List接口二

    一 ArrayList集合 ArrayList集合数据存储的结构是数组结构.元素增删慢,查找快,由于日常开发中使用最多的 功能为查询数据.遍历数据,所以ArrayList是最常用的集合. 许多程序员开 ...