HYSBZ-1045 糖果传递
有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。
假设当所有人获得均等的糖果的时候:
每个人手上的糖果的数量为\(ave\)
第\(i\)个人初始时的糖果数量为\(A_i\)
第\(i\)个人给了前一个人\(X_i\)个糖果(如果\(X_i\)是负数,代表前一个人实际上的给了第\(i\)个人\(X_i\)个糖果)
那么对于每个人,都满足等式
\]
然后可以列出n条等式
A_1-X_1+X_2=ave\\
...\\
A_{n-1}-X_{n-1}+X_0=ave\\
\]
最终的答案应该是\(\sum_{i=0}^{n-1}|X_{i}|\)
实际上以上的其中一条等式能够由其他的\(n-1\)条等式得到.
不同的等式只有\(n-1\)条,未知数有\(n\)个,不能直接解.
假设\(X_0\)是已知的值,可以推出所有的\(X\)的值
X_2=ave-A_1+X_1=X_1-(A_1-ave)=X_0-(A_0-ave)-(A_1-ave)\\
...\\
X_{n-1}=X_0-\sum_{i=0}^{n-2}(A_i-ave)
\]
定义\(C_k=C_{k-1}-(A_i-ave)\)
那么\(|X_k|=|X_0-C_k|\)
如何让\(\sum_{i=0}^{n-1}|X_{i}|\)变得尽量小,
可以发现,\(|X_0-C_k|\)可以看作是数轴上\(X_0\)和\(C_k\)的距离,
把\(X_0\),\(C_1\),\(C_2\),...,\(C_{n-1}\),都列在一条数轴上,
找到其中的一个点,让这个点到其他所有的点的距离的和最小.
显然,这几个点之中最靠中间的点,就是到其他所有点的距离的和最小的点.
那么这个距离的和就是答案
应该如何假设\(X_0\)的值?
\(X_0\)的含义是第\(0\)个人给第\(n-1\)个人的糖果的数量.
实际上,从第二个人开始,每人给前一个人\(X_i\)个糖果,到最后第\(n-1\)个人手上的糖果数就应该是\(ave\)了.
所以\(X_0\)应该是\(0\).
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
static ll n, sum, ave, mid, ans, a[1100100], c[1100100];
int main()
{
scanf("%lld", &n);
for(ll i = 0; i < n; ++i)
{
scanf("%lld", &a[i]);
sum += a[i];
}
ave = sum/n;
c[0] = 0;
for(int i = 1; i < n; ++i)
{
c[i] = c[i-1]+a[i]-ave;
}
sort(c, c+n);
mid = c[n/2];
for(int i = 0; i < n; ++i)
ans += abs(c[i] - mid);
printf("%lld\n", ans);
}
HYSBZ-1045 糖果传递的更多相关文章
- [BZOJ]1045 糖果传递(HAOI2008)
放一道数学题. Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n<=1000000,表示 ...
- BZOJ 1045 糖果传递(思维)
设第i个人给了第i+1个人mi个糖果(可以为负),因为最后每个人的糖果都会变成sum/n. 可以得到方程组 mi-mi+1=a[i+1]-sum/n.(1<=i<=n). 把方程组化为mn ...
- bzoj 1045糖果传递 数学贪心
首先我们假设平均数为ave 那么对于第1个人,我们假设他给第N个人K个糖果,第2个人给1,第3个人给2,第n个人给第n-1个人 那么对于第1个人给完n,第2个人给完1,第一个人不会再改变糖果数了,所以 ...
- BZOJ 1045 糖果传递
奇怪的式子.最后发现取中位数. #include<iostream> #include<cstdio> #include<cstring> #include< ...
- 【BZOJ-3293&1465&1045】分金币&糖果传递×2 中位数 + 乱搞
3293: [Cqoi2011]分金币 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 854 Solved: 476[Submit][Status] ...
- BZOJ 1045: [HAOI2008] 糖果传递 数学
1045: [HAOI2008] 糖果传递 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1045 Description 有n个小朋友坐 ...
- 【BZOJ 1045】 1045: [HAOI2008] 糖果传递
1045: [HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n& ...
- bzoj 1045: [HAOI2008] 糖果传递 贪心
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1812 Solved: 846[Submit][Stat ...
- 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 ...
随机推荐
- 12天,这本《重学Java设计模式》PDF书籍下载量9k,新增粉丝1400人,Github上全球推荐榜!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言
- Redis的事件机制
目录 一.Redis的运行过程 二.事件数据结构 2.1 文件事件数据结构 2.2 事件事件数据结构 3.3 事件循环 三.事件的注册过程 3.1 文件事件的注册过程 3.2 时间事件的注册过程 四. ...
- 02_HTML02
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"软件测试"获取视频和教程资料! b站在线视频 HTML ...
- JVM 学习笔记记录
JVM 学习笔记记录 Sun JDK 监控和故障处理工具 名称 主要作用 jps JVM Process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程 jstat JVM S ...
- RectTransform的localPosition与anchoredPosition(3D)的区别
RectTransform继承自Transform,用于描述矩形的坐标(Position),尺寸(Size),锚点(anchor)和中心点(pivot)等信息,每个2D布局下的元素都会自动生成该组件. ...
- springboot2.1.x版本报错总结
我使用的是springboot 2.1.7.RELEASE springcloud Greenwich.SR2 boot和cloud对应的版本号不能搞混,对应版本请参考https://sprin ...
- python网络爬虫实战PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:vg1y python网络爬虫实战帮助读者学习Python并开发出符合自己要求的网络爬虫.网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取互联网信息的程序或者脚 ...
- 从入门到熟悉HTTPS的9个问题
原文:bestswifter https://juejin.im/post/58c5268a61ff4b005d99652a Q1: 什么是 HTTPS? BS: HTTPS 是安全的 HTTP ...
- Flutter 容器(7) - DecoratedBox
DecoratedBox: 装饰容器,在其子widget绘制前(或后)绘制一个装饰Decoration(如背景.边框.渐变等) import 'package:flutter/material.dar ...
- RoBERTa:一个调到最优参的BERT
RoBERTa: A Robustly Optimized BERT Pretraining Approach. Yinhan Liu, Myle Ott, Naman Goyal, et al. 2 ...