【BZOJ1045】糖果传递(基于贪心的数学题)
大致题意: 有\(n\)个小朋友坐成一圈,每人有\(a[i]\)个糖果。每人只能给左右两人传递糖果,传递一个糖果代价为1,求使所有人获得均等糖果的最小代价。
数学转换
这题其实是一道带有浓厚数学色彩的贪心题。
我们可以先用\(sum\)来统计\(a[i]\)之和,然后将\(sum\)除以\(n\),从而求出最后每个小朋友应该拥有的糖果的个数。
我们可以用\(s[i]\)来表示第\(i\)个人给第\(i+1\)个人的糖果数量(如果为负,表示第\(i+1\)个人给第\(i\)个人\(-s[i]\)颗糖果),特殊的,\(s[n]\)表示第\(n\)个人给第\(1\)个人的糖果数量。
我们可以发现,对于第\(i\)个人,他的手上拿着的糖果数应为\(a[i]+s[i-1]\),即他原本拥有的糖果和第\(i-1\)个人给他的糖果,又由于每个人应拿的糖果数为\(sum\),所以\(a[i]+s[i-1]-sum\)即为他要交给第\(i+1\)个人的糖果数。
即\(s[i]=a[i]+s[i-1]-sum\)。
那么$$ans=sum_{i=1}^n |s[i]-S|$$
其中,\(S\)为一个定值。而我们的目的就是取一个合适的\(S\)使\(ans\)最小。
如何求解
那么,这道题目就变成了一个我们很熟悉的一个经典数学问题了,我们可以将\(s[1]\sim s[n]\)一一对应到数轴上,不难发现,最优的\(S\)应为\(s\)数组的中位数。
这样一来,这题就很简单了。
代码
#include<bits/stdc++.h>
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)
#define LL long long
#define N 1000000
using namespace std;
int n,a[N+5],s[N+5];
int read()
{
int x=0,f=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if(ch=='-') f=-1,ch=getchar();
while(ch>='0'&&ch<='9') (x*=10)+=ch-'0',ch=getchar();
return x*=f;
}
void write(LL x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
int main()
{
n=read();
LL sum=0;
for(int i=1;i<=n;i++) sum+=(a[i]=read());//用sum计算出总糖果数
sum/=n;//将sum除以n,得出每个人应拿的糖果数
for(int i=1;i<=n;i++) s[i]=a[i]+s[i-1]-sum;//递推求出s[]数组
sort(s+1,s+n+1);//排序一遍,找出中位数
LL ans=0;//ans统计答案
for(int i=1;i<=n;i++) ans+=abs(s[i]-s[(n+1)>>1]);//求出Σ|s[i]-S|,其中S为s[]数组的中位数,即s[(n+1)>>1]
return write(ans),0;
}
【BZOJ1045】糖果传递(基于贪心的数学题)的更多相关文章
- 【BZOJ1045】糖果传递(贪心)
[BZOJ1045]糖果传递(贪心) 题面 BZOJ 洛谷 题解 秉承者娱乐精神,我们必须写一个费用流,并且相信信仰跑不过去. 于是写了一个\(zkw\)费用流如下:(您可以无视此份代码) #incl ...
- BZOJ-1045 糖果传递 数学+递推
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2975 Solved: 1327 [Submit][Sta ...
- 【数学】【HAOI2008】【BZOJ1045糖果传递】【BZOJ3293分金币】论数学的重要性
BZOJ1045和BZOJ3293一模一样两道题,在这里我用1045来讲. 1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MB ...
- bzoj1045 糖果传递
escription 老师准备了一堆糖果, 恰好n个小朋友可以分到数目一样多的糖果. 老师要n个小朋友去拿糖果, 然后围着圆桌坐好, 第1个小朋友的左边是第n个小朋友, 其他第i个小朋友左边是第i-1 ...
- BZOJ1045 HAOI2008糖果传递(贪心)
显然最后每个小朋友所拥有的糖果数就是糖果数总和的平均数.设该平均数为t. 环的问题一般断成链,但这个题似乎没有什么很好的办法在枚举断点的时候快速算出答案(我甚至不知道会不会有断点) 于是我们假装把他断 ...
- bzoj 1045糖果传递 数学贪心
首先我们假设平均数为ave 那么对于第1个人,我们假设他给第N个人K个糖果,第2个人给1,第3个人给2,第n个人给第n-1个人 那么对于第1个人给完n,第2个人给完1,第一个人不会再改变糖果数了,所以 ...
- 【洛谷 P2512】 [HAOI2008]糖果传递(贪心)
题目链接 环形均分纸牌. 设平均数为\(ave\),\(g[i]=a[i]-ave\),\(s[i]=\sum_{j=1}^ig[i]\). 设\(s\)的中位数为\(s[k]\),则答案为\(\su ...
- 【BZOJ1045】[HAOI2008] 糖果传递 贪心
[BZOJ1045][HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正 ...
- 【BZOJ1045】[HAOI2008]糖果传递
[BZOJ1045][HAOI2008]糖果传递 题面 bzoj 洛谷 题解 根据题意,我们可以很容易地知道最后每个人的糖果数\(ave\) 设第\(i\)个人给第\(i-1\)个人\(X_i\)个糖 ...
随机推荐
- Hadoop 3.0完全分布式集群搭建方法(CentOS 7+Hadoop 3.2.0)
本文详细介绍搭建4个节点的完全分布式Hadoop集群的方法,Linux系统版本是CentOS 7,Hadoop版本是3.2.0,JDK版本是1.8. 一.准备环境 1. 在VMware worksta ...
- Codeforces Round #499 (Div. 1)部分题解(B,C,D)
Codeforces Round #499 (Div. 1) 这场本来想和同学一起打\(\rm virtual\ contest\)的,结果有事耽搁了,之后又陆陆续续写了些,就综合起来发一篇题解. B ...
- jmeter将参数值写入到指定文件(转)
有时在测试过程中需要将测试过程中生成的参数保存下来,jmeter并没有此类功能,此时,可以 通过beanshell编写代码来实现 思路: 每次请求响应返回后,通过正则表达式获取到需要保存的值,通过Be ...
- jmeter读取本地CSV文件
用jmeter录制考试上传成绩等脚本时,出现的问题及解决方法如下: 1.beanshell前置处理器,不能读取本地csv文件里的数据: 方法一: 在beanshell里不能直接从本地的csv文件里读取 ...
- Error: npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
执行npm install 时,提示警告信息: Error: npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0. ...
- 牛客练习赛41D(思维转化)
AC通道 要点 思路:题解中将所求进行转化\[max\{相似度\} = max\{M-不相似度\} = M-min\{不相似度\}\]因此转化为求某01串T与所给众S串的最小不相似度,而最终答案是选取 ...
- C# ThreadLocal
ThreadLocal的主要作用是让各个线程维持自己的变量. .NET 4.0在线程方面加入了很多东西,其中就包括ThreadLocal<T>类型,他的出现更大的简化了TLS的操作.Thr ...
- ubuntu tomcat https
1.generate key use java key tool -storepass *** 2.sign certificate sudo keytool -export -alias ### - ...
- Gym 101047K Training with Phuket's larvae
http://codeforces.com/gym/101047/problem/K 题目:给定n<=2000条绳子,要你找出其中三条,围成三角形,并且要使得围成的三角形面积最小 思路: 考虑一 ...
- 物体检测丨浅析One stage detector「YOLOv1、v2、v3、SSD」
引言 之前做object detection用到的都是two stage,one stage如YOLO.SSD很少接触,这里开一篇blog简单回顾该系列的发展.很抱歉,我本人只能是蜻蜓点水,很多细节也 ...