AcWing 122. 糖果传递

  • 一、题目链接
  • 二、题目分析
    • (一)算法标签
    • (二)解题思路
  • 三、AC代码
  • 四、其它题解

一、题目链接

AcWing 122. 糖果传递
进阶题目 AcWing 105. 七夕祭


二、题目分析

(一)算法标签

贪心 排序 中位数 推公式

(二)解题思路

设 x i x_i xi​为i号小朋友(初始有 a i a_i ai​个糖果)向i-1号小朋友传递的糖果数(其中,i=2,3,4,…,n, 若 x i x_i xi​为负数,则表示i-1号小朋友向i号小朋友传递的糖果数),特别地当i=1时, x 1 x_1 x1​表示1号小朋友向n号小朋友传递的糖果数

目标: ∣ x 1 ∣ + ∣ x 2 ∣ + ∣ x 3 ∣ + ⋯ + ∣ x n − 1 ∣ + ∣ x n ∣ \vert x_1 \vert + \vert x_2\vert+\vert x_3 \vert+ \dots +\vert x_{n-1} \vert+\vert x_n \vert ∣x1​∣+∣x2​∣+∣x3​∣+⋯+∣xn−1​∣+∣xn​∣最小
由题意,可得:
{ x 1 = x 2 + a 1 − a ˉ x 2 = x 3 + a 2 − a ˉ ⋯ x n − 1 = x n + a n − 1 − a ˉ x n = x 1 + a n − a ˉ \begin{cases} x_1=x_2+a_1-\bar a \\ x_2=x_3+a_2-\bar a \\ \cdots \\ x_{n-1}=x_n+a_{n-1}-\bar a \\ x_n=x_1+a_n-\bar a \\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​x1​=x2​+a1​−aˉx2​=x3​+a2​−aˉ⋯xn−1​=xn​+an−1​−aˉxn​=x1​+an​−aˉ​

n个方程相加得到一个恒等式: 0 = a 1 + a 2 + ⋯ + a n − n a ˉ 0=a_1+a_2+\cdots+a_n-n\bar a 0=a1​+a2​+⋯+an​−naˉ,所以上面的方程组有n-1个有效方程,n个未知元,那么可以用其中一个未知元来表示其它n-1个未知元

对上述方程组作一下变换,可以得到:
{ x 1 = x 1 − 0 x 2 = x 3 − [ ( n − 1 ) a ˉ − a n − a n − 1 − ⋯ − a 2 ] ⋯ x n − 1 = x 1 − ( 2 a ˉ − a n − a n − 1 ) x n = x 1 − ( a ˉ − a n ) \begin{cases} x_1=x_1-0 \\ x_2=x_3-[(n-1)\bar a - a_n-a_{n-1}-\cdots-a_2]\\ \cdots \\ x_{n-1}=x_1-(2\bar a-a_n-a_{n-1}) \\ x_n=x_1-(\bar a - a_n) \\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​x1​=x1​−0x2​=x3​−[(n−1)aˉ−an​−an−1​−⋯−a2​]⋯xn−1​=x1​−(2aˉ−an​−an−1​)xn​=x1​−(aˉ−an​)​
等价于下面方程组:
{ x 1 = x 1 − c 1 x 2 = x 3 − c 2 ⋯ x n − 1 = x 1 − ( 2 a ˉ − a n − a n − 1 ) x n = x 1 − ( a ˉ − a n ) \begin{cases} x_1=x_1-c_1 \\ x_2=x_3-c_2\\ \cdots \\ x_{n-1}=x_1-(2\bar a-a_n-a_{n-1}) \\ x_n=x_1-(\bar a - a_n) \\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​x1​=x1​−c1​x2​=x3​−c2​⋯xn−1​=x1​−(2aˉ−an​−an−1​)xn​=x1​−(aˉ−an​)​

其中,
{ c 1 = 0 c 2 = ( n − 1 ) a ˉ − a n − a n − 1 − ⋯ − a 2 ⋯ c n − 1 = 2 a ˉ − a n − a n − 1 c n = a ˉ − a n \begin{cases} c_1=0 \\ c_2=(n-1)\bar a - a_n-a_{n-1}-\cdots-a_2 \\ \cdots \\ c_{n-1}=2\bar a-a_n-a_{n-1}\\ c_n=\bar a - a_n\\ \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧​c1​=0c2​=(n−1)aˉ−an​−an−1​−⋯−a2​⋯cn−1​=2aˉ−an​−an−1​cn​=aˉ−an​​
可以发现当 i > 1 i>1 i>1时 c i = c i + 1 + a ˉ − a i c_i=c_{i+1}+\bar a -a_i ci​=ci+1​+aˉ−ai​
回到目标:
此时,
∣ x 1 ∣ + ∣ x 2 ∣ + ∣ x 3 ∣ + ⋯ + ∣ x n − 1 ∣ + ∣ x n ∣ \vert x_1 \vert + \vert x_2\vert+\vert x_3 \vert+ \dots +\vert x_{n-1} \vert+\vert x_n \vert ∣x1​∣+∣x2​∣+∣x3​∣+⋯+∣xn−1​∣+∣xn​∣最小
等价于 ∣ x 1 − c 1 ∣ + ∣ x 1 − c 2 ∣ + ∣ x 1 − c 3 ∣ + ⋯ + ∣ x 1 − c n − 1 ∣ + ∣ x 1 − c n ∣ \vert x_1-c_1 \vert + \vert x_1-c_2\vert+\vert x_1-c_3 \vert+ \dots +\vert x_1-c_{n-1} \vert+\vert x_1-c_n \vert ∣x1​−c1​∣+∣x1​−c2​∣+∣x1​−c3​∣+⋯+∣x1​−cn−1​∣+∣x1​−cn​∣最小 (其中 c 1 , c 2 , ⋯ , c n c_1,c_2,\cdots,c_n c1​,c2​,⋯,cn​ 均为常数)
当 x 1 x_1 x1​取 c 1 , c 2 , ⋯ , c n c_1,c_2,\cdots,c_n c1​,c2​,⋯,cn​的中位数即可使上述式子的值最小
此时,问题转换成了AcWing 104. 货仓选址【贪心】【《算法竞赛进阶指南》】


三、AC代码

解法一:

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;typedef long long LL;const int N = 1e6 + 10;int a[N], c[N];
int n;int main()
{cin >> n;LL sum = 0;for (int i = 1; i <= n; i ++ ){scanf("%d", &a[i]);sum += a[i];}// 每个小朋友最后的糖果数一样,所以平均数一定是整数LL avg = sum / n;// 求c[i]for (int i = n; i > 1; i -- )c[i] = c[i + 1] + avg - a[i];// 找c[i]的中位数sort(c + 1, c + 1 + n);LL mid = c[1 + n >> 1];// 求结果LL res = 0;for (int i = 1; i <= n; i ++ )res += abs(c[i] - mid);cout << res << endl;return 0;
}

四、其它题解

AcWing 122. 糖果传递 1

AcWing 122. 糖果传递 2

AcWing 122. 糖果传递【环形纸牌均分问题】

AcWing 122. 糖果传递【贪心】【《算法竞赛进阶指南》,微软面试题 , HAOI2008】相关推荐

  1. 金字塔(算法竞赛进阶指南)

    虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下. 经过多年的研究,科学家对这座金字塔的内部结构已经有所了解. 首先,金字塔由若干房间组成,房间之间连有通道. 如果把房间看作节点, ...

  2. 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩

    文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...

  3. 《算法竞赛进阶指南(by 李煜东)》习题题解 集合

    又是笔者给自己挖的大坑. 这里是李煜东所著<算法竞赛进阶指南(by 李煜东)>的习题题解集合. 有任何错误请在对应文章下反馈或联系 nicest1919@163.com ,谢谢 qwq 从 ...

  4. 算法竞赛进阶指南 萌新入门!

    算法竞赛进阶指南 文章目录 算法竞赛进阶指南 前言 一.介绍本书 二.如何阅读本书 三.总结 **笔记思路和结构 ** 算法竞赛进阶指南 这篇文章就简单的写一下吧! 前言 ​ 作为一个想要入坑的算法的 ...

  5. 《算法竞赛进阶指南》数论篇

    <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSGS <算法竞赛进阶指南>数论篇(1)-最大公约数,素数筛,欧拉函数,同余,欧拉定理,BSG ...

  6. CH5202 自然数拆分Lunatic版(算法竞赛进阶指南,完全背包)

    算法竞赛进阶指南,278页,完全背包 本题要点: 1.把完全背包的代码改改即可.常规的完全背包: 有n个物品,每个物品的体积是v[i], 价值是w[i], 求装到大小为m的大背包,能获得的最大价值(每 ...

  7. 中位数--《算法竞赛进阶指南》(货仓选址和七夕祭问题详解)

    中位数 今天又和大家见面了啦~ 依旧是 <算法竞赛进阶指南>的学习哦~ 中位数(Median)又称中值,统计学中的专有名词,是按顺序排列的一组数据中居于中间位置的数,代表一个样本.种群或概 ...

  8. 算法竞赛进阶指南 骑士放置

    4: 最大独立集 :选出最多的点,使得选出的点之间没有边. 求最大独立集:选出最小的点可以破坏所有的边 <==>最小点覆盖 <==>最大匹配数. 假设最大匹配数为m,共有n个点 ...

  9. 算法竞赛进阶指南0x3A 博弈论之SG函数

    算法竞赛进阶指南0x3A 博弈论之SG函数

最新文章

  1. java kryo_Kryo框架使用方法代码示例
  2. Python基础学习!容器:列表,元组,字典与集合!(2)
  3. ionic3 java,ionic3-环境搭建问题
  4. centos 升级cmake from 2.* to 3.*
  5. 电脑壁纸知乎_电脑壁纸(个人向
  6. 使用 generator-easy-ui5 快速创建 SAP UI5 应用的工程结构
  7. 数字通信原理_光耦继电器在实际应用中的作用以及工作原理!
  8. MobX基础 ----- 类的静态属性和装饰器
  9. 【自然框架】元数据的数据库结构的详细说明和示例(三):项目与数据库字段的关联...
  10. java基础试题_Java基础测试题带答案
  11. nodejs后台系列--第三篇-最简单的全栈demo:koa2+mysql+vue
  12. 推荐一款开源游戏开发平台
  13. 架构之美-读书笔记之二
  14. Simplify3D打印参数设置
  15. matlab画热力网格图
  16. LeetCode347. 前 K 个高频元素(含详细解析JAVA实现)
  17. java map putall 覆盖_Java HashMap putAll() 方法
  18. 魅族更新Android10,魅族16S升级90hz?Flyme安卓10如约而至
  19. 即时通讯IM技术领域提高篇
  20. CISCO WLC的配置备份与导入

热门文章

  1. 第十二届蓝桥杯校内模拟赛记录12月26日
  2. windows系统打印机无法共享报错0x000006cc......
  3. 清除redis的key与数据
  4. 良心安利医疗素材网站
  5. 计算机课组会议讲话,备课组长会议上的讲话
  6. eth0和lo含义和虚拟IP技术
  7. Centos 无法获取IP-- No suitable device found for this connection device lo not available because
  8. TOP10! KubeCon + CloudNativeCon最受欢迎演讲视频
  9. 什么是mmap?零拷贝?DMA?
  10. 阿里云-Centos7安装Jenkins