problem

  • 一个有n个数的环
  • 每次只能向相邻的数移动,移动一个数代价为1
  • 求让所有数相等的最小代价

solution

一:思路
1、纸牌均分问题每行答案是∑ni=1|i∗T/n−G[i]|∑i=1n|i∗T/n−G[i]| \sum_{i=1}^n|i*T/n-G[i]| ,其中T为总牌数,G[i]是a[i]的前缀和,a[i]为每个人的牌数。(这里考虑让每个人一开始手中的牌数都减去T/nT/n T/n(为什么要减,后面就有好处了),答案显然不变(数学上也可以推导出),每行答案即为∑ni=1S[i]∑i=1nS[i]\sum_{i=1}^nS[i],其中s[i]为b[i]前缀和,b[i]=a[i]-T/n。)
2、对于环,可以拆为链,但是复杂度会上升。考虑从第k个人断开,写成一行,这n个人持有的纸牌数前缀和分别为(a[k+1],s[k+1]-s[k]; a[k+2],s[k+2]-s[k];a[n],s[n]-s[k];a[1],s[1]+s[n]-s[k]);因为s[n]=0(前面已经减去了t/n,所以均分后每个人手中有0张牌)。所以答案就是∑ni=1|s[i]−s[k]|∑i=1n|s[i]−s[k]|\sum_{i=1}^n|s[i]-s[k]|,这里可以枚举k得到最小值(那为什么还要这么麻烦的用在上面减去T/n呢,难道是为了公式好看?)
3、不。。。也可以直接统计,因为,——到这里就是一个货仓选址问题。
货仓选址:给定数轴上的n个点,找出一个到他们的距离之和尽量小的点,而这个点就是这些数中的中位数,证明(随便找一个点,若是左边的点比右边多,那么往左移距离和就会减少,反之右移距离减少,一定是中位数最优)。

二:数据范围有毒。
1、至少1e6
2、记得开long long

codes

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1000010;
typedef long long LL;
LL a[maxn], f[maxn], sum, ans;
int main(){ios::sync_with_stdio(false);int n;  cin>>n;for(int i = 1; i <= n; i++){cin>>a[i];sum += a[i];}sum /= n;for(int i = 1; i <= n; i++)a[i]-=sum;for(int i = 1; i <= n; i++)f[i]=f[i-1]+a[i];sort(f+1,f+n+1);for(int i = 1; i <= n; i++)ans+=abs(f[i]-f[n+1>>1]);cout<<ans<<'\n';return 0;
}

double experience

双倍经验甚至更多:
七夕祭

【HAOI2008】【BZOJ1045】糖果传递(环形纸牌均分,前缀和)相关推荐

  1. 【codevs2485】七夕祭(贪心,环形纸牌均分)

    solution 1.首先行列独立互相不影响,可以单独统计.于是就变成了一个环形纸牌均分问题. 2.纸牌均分问题每行答案是∑ni=1|i∗T/n−G[i]|∑i=1n|i∗T/n−G[i]| \sum ...

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

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

  3. BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)

    题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 假设平均数是x,且a1给an了k个(k<0说明是an给a1了-k个),那么总代价就 ...

  4. bzoj1045 糖果传递

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

  5. 【BZOJ】【1045/1465】【HAOI2008】糖果传递

    思路题/神奇的转化-- orz hzwer 或许这个思路可以从单行而非环形的递推中找到?(单行的时候,从左往右直接递推即可-- 感觉好神奇>_<脑残患者想不出-- P.S.话说在$n\le ...

  6. BZOJ-1045 糖果传递

    先拆成链的情况来看. 设B[i]表示i要向i+1拿糖果的数量,C为平均数,则B[i] = C - A[i] + B[i-1] Answer就是B的绝对值之和 现在来看环的情况,也就是说B[n]指的是n ...

  7. 【网络流24题】【LOJ6013】负载平衡(环形纸牌均分,最小费最大流)

    problem 一个有n个数的环 每次只能向相邻的数移动,移动一个数代价为1 求让所有数相等的最小代价 solution 从s向每个点连容量为库存量,费用为0的边 从每个点向t连容量为平均库存量,费用 ...

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

    AcWing 122. 糖果传递 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 122. 糖果传递 进阶题目 AcWing 105 ...

  9. 中位数应用-货仓选址-纸牌均分-糖果传递-七夕祭

    1. 货仓选址 描述 在一条数轴上有N家商店,它们的坐标分别为 A[1]~A[N].现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品.为了提高效率,求把货仓建在何处,可以使得货 ...

最新文章

  1. markdown 使用
  2. 俄罗斯智库 | 人工智能在军事领域的发展现状及应用前景
  3. 【GoLang】转载:我为什么放弃Go语言,哈哈
  4. java取内核数_在Java中查找内核数
  5. the Open Source Community
  6. java placeholder_Java占位符
  7. 1)session总结
  8. POI实现超大数据的Excel的读写操作
  9. 【NLP】cs224n课程笔记
  10. 国赛数学建模——北理工校赛1
  11. 单片机与手机应用进行蓝牙通讯
  12. 高等数学上学习总结(集合,邻域,函数)
  13. 问题:TypeError: Descriptors cannot not be created directly.解决方法
  14. https://jingyan.baidu.com/article/c45ad29cd06453051753e2e9.html
  15. 娱乐万岁,躺平无罪!聊点有技术含量的
  16. Mysql数据库连接池之C3p0的使用
  17. Win7资源管理器自动展开左侧文件夹如何设置
  18. 留一法(Leave-One-Out)与确定性
  19. NVIDA显卡支持的编码器+解码器对应表
  20. 用计算机探求 已知,【计算机科学与探索杂志社】计算机科学与探索杂志社编辑部...

热门文章

  1. 词汇的积累 —— 反义词、同义词
  2. 强悍的 Linux —— tar.xz 文件的解压
  3. 同余运算及其基本性质(证明)
  4. sklearn 中的 Pipeline 机制
  5. convenient functions in numpy
  6. C++11/14::右值引用
  7. 零基础学python实战-Python3零基础入门到爬虫实战
  8. 开课吧学python靠谱吗-开课吧成为CNCC中国计算机大会唯一教育合作伙伴
  9. python代码大全-python贪吃蛇游戏代码
  10. 一年突破3亿游戏安装量 小米游戏双发行模式助力游戏开发者