bzoj1045题解
【解题思路】
(数据范围劝退?正确范围应该是n≤1000000)
设xi表示第i个小朋友给第i+1个小朋友的糖果数(特殊的,xn表示第n个小朋友给第1个小朋友的糖果数),Â表示平均糖果数,有如下方程组:
•ai-xi+xi-1=Â(i∈[2,n]∩N)
•a1-x1+xn=Â
于是可整理为:
•x2=a1+x1-Â
•x3=a2+x2-Â=a1+a2+x1-2Â
...
•xn=an-1+xn-1-Â=...=a1+a2+...+an-1+x1-(n-1)Â
设sn=nÂ-∑ai(i∈[1,n]∩N),可整理为:
•x2=x1-s1
•x3=x1-s2
...
•xn=x1-sn-1
而答案表达式为∑|xi|(i∈[1,n]∩N),展开即|x1|+∑|x1-si-1|(i∈[2,n]∩N),显然达到最小值时x1值为所有si及0的中位数。复杂度O(nlog2n)。
【参考代码】
#pragma GCC optimize(2)
#include <algorithm>
#include <cstdio>
#define REP(i,low,high) for(register int i=(low);i<=(high);i++)
using namespace std;
static int n; long long a[],s[];
int main()
{
scanf("%d",&n);
long long ave=0ll; REP(i,,n) scanf("%lld",a+i),ave+=a[i];
ave/=n,s[n]=0ll; REP(i,,n-) s[i]=s[i-]+a[i]-ave; sort(s+,s+n+);
long long m=n&?s[n+>>]:s[n>>]+s[n+>>]>>,ans=0ll;
REP(i,,n) ans+=llabs(m-s[i]); return printf("%lld\n",ans),;
}
bzoj1045题解的更多相关文章
- LG2512/BZOJ1045 「HAOI2008」糖果传递 中位数
问题描述 LG2512 BZOJ1045 题解 这是一个链状问题的环状版本. 问题最终变为给定数轴上的\(n\)个点,找出一个到他们的距离之和尽量小的点,而这个点就是这些数中的中位数. 网络流24题的 ...
- 【BZOJ1045】[HAOI2008]糖果传递
[BZOJ1045][HAOI2008]糖果传递 题面 bzoj 洛谷 题解 根据题意,我们可以很容易地知道最后每个人的糖果数\(ave\) 设第\(i\)个人给第\(i-1\)个人\(X_i\)个糖 ...
- 【BZOJ1045】糖果传递(贪心)
[BZOJ1045]糖果传递(贪心) 题面 BZOJ 洛谷 题解 秉承者娱乐精神,我们必须写一个费用流,并且相信信仰跑不过去. 于是写了一个\(zkw\)费用流如下:(您可以无视此份代码) #incl ...
- 【BZOJ1045】[HAOI2008] 糖果传递 贪心
[BZOJ1045][HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正 ...
- HAOI2008题解
又来写题解辣-然而并不太清楚题目排列情况...不管辣先写起来- T1:[bzoj1041] 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1 ...
- (洛谷P2512||bzoj1045) [HAOI2008]糖果传递 || 洛谷P4016 负载平衡问题 || UVA11300 Spreading the Wealth || (洛谷P3156||bzoj3293) [CQOI2011]分金币
bzoj1045 洛谷P4016 洛谷P2512 bzoj3293 洛谷P3156 题解:https://www.luogu.org/blog/LittleRewriter/solution-p251 ...
- BZOJ1045: [HAOI2008]糖果传递&BZOJ1465: 糖果传递&BZOJ3293: [Cqoi2011]分金币
[传送门:BZOJ1045&BZOJ1465&BZOJ3293] 简要题意: 给出n个数,每个数每次可以-1使得左边或者右边的数+1,代价为1,求出使得这n个数相等的最小代价 题解: ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
随机推荐
- 当一个页面中有多个form表单并且有重名的元素时,js获取指定form表单中的指定元素
有时候我们会在一个页面中写了多个form表单,碰巧多个form表单中又有相同名称的元素,而我们又不想改名字,这个时候就能用到 $("#form1 #div1").val() 好玩吧 ...
- nodejs 进阶:图片缩小
demo 效果: 代码: /** * Created by ZXW on 2017/10/30. */ var fs = require('fs'); var gm = require('gm'); ...
- 62. File类常用方法
为了怕混淆,先说明一些下面要出现的名词意思:例如:D:\\新建文件夹 (2)\\a.txt 和 D:\\新建文件夹 (2)\\aaaa D:\\新建文件夹 (2) 父路径 a.txt ...
- php操作redis--有序集合(sorted set)篇
常用函数:zAdd,zRange,zRem,zCard等. 应用场景:类似集合,可以提供一个优先级的参数来为成员排序,如:分数 连接 $redis = new Redis(); $redis-> ...
- 如何将项目中的package.json文件中的模块更新到最新版本
有时候自己之前开发的项目回头运行的时候发行好多模块的版本不是最新的,此时想更为为最新版本,使用如下命令即可: npm i -g npm-check-updates ncu -u npm install
- magento 多域名多店
在magento1.4中请参考官网 :http://www.magentocommerce.com/knowledge-base/entry/tutorial-multi-site-multi-dom ...
- delphi下运行vbscript脚本
简单一个vb脚本,功能为打开被限制的注册表.Set wso = CreateObject("WScript.Shell")wso.RegWrite "HKEY_CURRE ...
- gensim中TaggedDocument 怎么使用
我有两个目录,我想从中读取它们的文本文件并给它们贴上标签,但我不知道如何通过taggedDocument来实现这一点.我以为它可以作为标记文档([strings],[labels])工作,但这显然不起 ...
- error C3861: “L”: 找不到标识符
提示错误的语句:::CLSIDFromProgID(L("Shell.Application"), &clsid); 解决办法: 出现上面的错误是因为语法错误了,去掉字符串 ...
- PAT 1010 Radix(X)
1010 Radix (25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = ...