【HAOI2008】【BZOJ1045】糖果传递(环形纸牌均分,前缀和)
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】糖果传递(环形纸牌均分,前缀和)相关推荐
- 【codevs2485】七夕祭(贪心,环形纸牌均分)
solution 1.首先行列独立互相不影响,可以单独统计.于是就变成了一个环形纸牌均分问题. 2.纸牌均分问题每行答案是∑ni=1|i∗T/n−G[i]|∑i=1n|i∗T/n−G[i]| \sum ...
- BZOJ-1045 糖果传递 数学+递推
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2975 Solved: 1327 [Submit][Sta ...
- BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)
题意 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. 思路 假设平均数是x,且a1给an了k个(k<0说明是an给a1了-k个),那么总代价就 ...
- bzoj1045 糖果传递
Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数nn<=1'000'000,表示小朋友的个 ...
- 【BZOJ】【1045/1465】【HAOI2008】糖果传递
思路题/神奇的转化-- orz hzwer 或许这个思路可以从单行而非环形的递推中找到?(单行的时候,从左往右直接递推即可-- 感觉好神奇>_<脑残患者想不出-- P.S.话说在$n\le ...
- BZOJ-1045 糖果传递
先拆成链的情况来看. 设B[i]表示i要向i+1拿糖果的数量,C为平均数,则B[i] = C - A[i] + B[i-1] Answer就是B的绝对值之和 现在来看环的情况,也就是说B[n]指的是n ...
- 【网络流24题】【LOJ6013】负载平衡(环形纸牌均分,最小费最大流)
problem 一个有n个数的环 每次只能向相邻的数移动,移动一个数代价为1 求让所有数相等的最小代价 solution 从s向每个点连容量为库存量,费用为0的边 从每个点向t连容量为平均库存量,费用 ...
- AcWing 122. 糖果传递【贪心】【《算法竞赛进阶指南》,微软面试题 , HAOI2008】
AcWing 122. 糖果传递 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 122. 糖果传递 进阶题目 AcWing 105 ...
- 中位数应用-货仓选址-纸牌均分-糖果传递-七夕祭
1. 货仓选址 描述 在一条数轴上有N家商店,它们的坐标分别为 A[1]~A[N].现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品.为了提高效率,求把货仓建在何处,可以使得货 ...
最新文章
- markdown 使用
- 俄罗斯智库 | 人工智能在军事领域的发展现状及应用前景
- 【GoLang】转载:我为什么放弃Go语言,哈哈
- java取内核数_在Java中查找内核数
- the Open Source Community
- java placeholder_Java占位符
- 1)session总结
- POI实现超大数据的Excel的读写操作
- 【NLP】cs224n课程笔记
- 国赛数学建模——北理工校赛1
- 单片机与手机应用进行蓝牙通讯
- 高等数学上学习总结(集合,邻域,函数)
- 问题:TypeError: Descriptors cannot not be created directly.解决方法
- https://jingyan.baidu.com/article/c45ad29cd06453051753e2e9.html
- 娱乐万岁,躺平无罪!聊点有技术含量的
- Mysql数据库连接池之C3p0的使用
- Win7资源管理器自动展开左侧文件夹如何设置
- 留一法(Leave-One-Out)与确定性
- NVIDA显卡支持的编码器+解码器对应表
- 用计算机探求 已知,【计算机科学与探索杂志社】计算机科学与探索杂志社编辑部...