题目描述

原题来自:HAOI 2008

有 n个小朋友坐成一圈,每人有 ai 颗糖果。每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为 1 。求使所有人获得均等糖果的最小代价。

输入格式

第一行有一个整数  ,n表示小朋友个数;

在接下来 n行中,每行一个整数 。

输出格式

输出使所有人获得均等糖果的最小代价。

样例

样例输入

4
1
2
5
4

样例输出

4

数据范围与提示

对于 30% 的数据,n<1000;

对于100%  的数据,n<10^9,保证答案可以用64  位有符号整数存储。

题目链接:https://loj.ac/problem/10010

对于这道,emmmm据说是小学奥赛题,我看博客半小时才弄通,最后发现是自家会长的博客,O(∩_∩)O哈哈~

跪拜大佬:https://blog.csdn.net/qq_41890797/article/details/90244567

我对这道数学题的思路:

1.设未知数; 2.求公式;3.求中位数的负数;^_^ha大废话,显然觉的这道题有很多值得深入挖掘的性质,比如每个人最终的状态求个平均值就好了 。那么先不考虑算法(好像也不涉及算法),而是研究一波题面。 
1.显然,代价的计算是一个麻烦的事情。我认为代价的计算应该是与路径有关,而不是与人有关。也就是说,我们关心的是两个人之间的路径上糖果移动的情况,可以设Xi:Ai—>Ai+1为糖果的路径转移。 
2.我又发现,一条路径上糖果的移动方向只有一个,可以用正负来表示。接着我们还发现,只要知道了一条路径上糖果的移动情况,那么其他路径也是可以推出来的。 
这时,公式已经出来了,也就是求出平均数然后列出每一条路径的糖果运送情况得到的,得到固定值Si的中位数,让Xn为中位数的相反数即可;

每人每次传递一个糖果代价为1

推公式过程

本题用到递推和贪心的算法思想,偏重对数学思维的检测。
(1).需要注意的题中条件:
          <1>.首先要明确:n个人围成环坐; 
          <2>.只能左右传递;
           <3>.使得每个人得到均等的饺子ave;
 (2).找出递推式 
          <1>关注的每两个人之间的路径上饺子移动的情况。 
          <2> 设第i个人会给第i+1个人xi个糖果(带符号)即下图:那么  ai-xi+xi-1=ave;
    
                    1        2        3        4
                初始值:   1        2         5       4
                最终值:   3        3         3       3
                移动情况:-2      -1        2        1

<3>将所有的式子列出来然后每一个做一个前缀和:那么xn−xi=∑ai−ave。
          <5> 变形:xi=xn−(∑ai−ave)。((∑ai−ave)为一个常量,简写为k)
         <4>找到递推式,要求∑|xi|最小实际上就是要求∑|xn−k|最小 。利用绝对值的几何意义,那么xn取这些常量k里的中位数时,愤怒值有最小值.

上代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll;
const int M=1e6+10;
int a[M],s[M];
int main()
{int n;ll sum=0;scanf("%d",&n);for(int i=1; i<=n; i++){scanf("%d",&a[i]);sum+=a[i];}ll ave=sum/n,ans=0;for(int i=1; i<=n; i++)s[i]=(a[i]-ave)+s[i-1];///减平均值后的前缀和sort(s+1,s+1+n);///为求中位数for(int i=1; i<=n; i++)ans+=abs(s[i]+(-s[(n+1)>>1]));///找(s[(n+1)>>1]为中位数)的负数printf("%lld\n",ans);return 0;
}

#10010 「一本通 1.1 练习 6」糖果传递 (数学+贪心)相关推荐

  1. #10003. 「一本通 1.1 例 4」加工生产调度(贪心)

    加工生产调度 题目描述 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.询问怎样安排这 ...

  2. 「一本通 6.5 练习 3」迷路

    「一本通 6.5 练习 3」迷路 题目描述 大意说一个给你有向图, 一个有n个节点,每个节点相连的边为所需要花费的时间, 问你从1到n 在时间刚好为t是的方案数.输出%2009 注意:不能在某个节点逗 ...

  3. 【C++】「一本通 1.1 例 4」加工生产调度

    「一本通 1.1 例 4」加工生产调度 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1425 LibreOJ ...

  4. LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】

    10082. 「一本通 3.3 例 1」Word Rings [题目描述] 传送门 [题解] 将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值.二分枚举答案,最后SPFA刷正环,因为只要有 ...

  5. #10016. 「一本通 1.2 练习 3」灯泡(三分)

    参考博客链接:「一本通 1.2 练习 3」灯泡(三分) #include<stdio.h> #include<string.h> #include<math.h> ...

  6. 【C++】「一本通 1.1 例 2」种树

    「一本通 1.1 例 2」种树 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [解析] [代码] [来源] 一本通题库-1423 LibreOJ-10001 vjud ...

  7. #10001. 「一本通 1.1 例 2」种树

    #10001. 「一本通 1.1 例 2」种树 满足n个区间种树的要求,求最少种多少棵数 思路 按照区间的尾巴来排序,因为如果区间有重叠的种在第一个区间的尾巴可以使得种树更少,所有每次始从尾巴开始种树 ...

  8. 【C++】「一本通 1.1 例 5」智力大冲浪

    「一本通 1.1 例 5」智力大冲浪 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1426 LibreOJ- ...

  9. 「一本通 1.2 例 2」Best Cow Fences

    题目链接: 链接: [link](信息学奥赛一本通(C++版)在线评测系统). 首先这道题要求找平均数,且要求所选片段长度需要大于等于l.那么首先想到的就是最暴力的方法就是找到所有大于等于l的片段在其 ...

最新文章

  1. 广东海洋大学体育馆管理系统 开发日记2
  2. 人工智能未来读后感 ----by RayKurzweil
  3. boost::mpl::abs相关的测试程序
  4. html往下滑变成水平,HTML - 水平滑块CSS最佳方法_html_开发99编程知识库
  5. SQLite学习手册
  6. 南京大学开源!ResT:高效Transformer架构!
  7. 第五节、矩阵分解之LU分解
  8. 抽象类、接口、内部类
  9. 使用.tar文件 升级cisco 3550 IOS
  10. 大数据做基础 构建流动人口健康屏障
  11. 10个基础且实用的C语言经典实例【附源码】
  12. 湖南职称计算机英语,湖南职称计算机考试哪里考,A,B,C,D各级别是怎么划分的...
  13. Iptable与firewalld防火墙
  14. Only fullscreen activities can request orientation终极解决方法
  15. Bussiness Card Design
  16. PTA 循环结构 7-3 简写转全称
  17. OneDrive登录失败解决办法
  18. 简洁的python复习(原创基础上有部分改动,持续更新)
  19. 异步(感应)电机概述
  20. 马斯克的这波神操作,让我意识到保持写代码的能力有多重要

热门文章

  1. Android插件化开发基础之Java反射机制研究
  2. git之Pushing to the remote branch is not fast-forward错误解决
  3. 实现html5音乐的自动播放,html5中audio实现播放列表和自动播放
  4. java数位倒置递归_有人能解释一下这个递归代码如何在java中反转int吗?
  5. filegetcontents php 返回值,php – file_get_contents没有返回任何数据
  6. 如何巧妙拒绝老同学借钱?哈哈哈哈哈......
  7. 深度学习框架PyTorch与TensorFlow,谁更胜一筹?
  8. TED演讲:区块链将如何改变世界?看完太震撼了!
  9. oracle12c考试内容,12c ocp考试内容
  10. bpmn如何查看代码 idea_提高程序员效率的IDEA插件推荐(五大神器)