LibreOJ_10010

news2024/9/23 17:22:03

链接

  • 点此跳转

思路

题目描述

n n n 个小朋友坐成一圈,每人有 a i a_i ai 颗糖果。

每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为 1 1 1

求使所有人获得均等糖果的最小代价。

分析

x i x_i xi 表示第 i i i 个朋友向第 i − 1 i-1 i1 个小朋友给的糖果数量。如下图所示:

在这里插入图片描述

根据题目要求,我们的目标为下面的式子:
m i n { ∣ x 1 ∣ + ∣ x 2 ∣ + . . . + ∣ x n ∣ } min\{|x_1| + |x_2| + ... + |x_n|\} min{x1+x2+...+xn}

设平均数为 a v g avg avg 。可以列出来如下方程:
{ a 1 − x 1 + x 2 = a v g a 2 − x 2 + x 3 = a v g ⋮ a n − 1 − x n − 1 + x n = a v g a n − x n + x 1 = a v g \left\{\begin{array}{c} a_{1}-x_{1}+x_{2}=a v g \\ a_{2}-x_{2}+x_{3}=a v g \\ \vdots \\ a_{n-1}-x_{n-1}+x_{n}=a v g\\ a_{n}-x_{n}+x_{1}=a v g \end{array}\right. a1x1+x2=avga2x2+x3=avgan1xn1+xn=avganxn+x1=avg

移项,将未知量放在左边:
{ x 1 − x 2 = a 1 − a v g x 2 − x 3 = a 2 − a v g ⋮ x n − 1 − x n = a n − 1 − a v g x n − x 1 = a n − a v g \left\{ \begin{aligned} x_{1}-x_{2} &= a_{1}-avg\\ x_{2}-x_{3} &= a_{2}-avg \\ & \vdots \\ x_{n-1}-x_{n} &= a_{n-1}-avg \\ x_{n}-x_{1} &= a_{n}-avg \\ \end{aligned} \right. x1x2x2x3xn1xnxnx1=a1avg=a2avg=an1avg=anavg

从倒数第二行一直到第一行累加到最后一行得到(最后一行不动),再移项得:
{ x n = x 1 − ( a v g − a n ) x n − 1 = x 1 − ( 2 × a v g − a n − a n − 1 ) ⋮ x 2 = x 1 − ( ( n − 1 ) × a v g − a n − a n − 1 − . . . − a 2 ) x 1 = x 1 \left\{ \begin{aligned} x_{n} & =x_{1}-(avg-a_{n})\\ x_{n-1} & =x_{1}-(2\times avg-a_{n}-a_{n-1})\\ & \vdots \\ x_{2} & =x_{1}-((n-1)\times avg-a_{n}-a_{n-1}-...-a_{2})\\ x_{1} & = x_{1} \end{aligned} \right. xnxn1x2x1=x1(avgan)=x1(2×avganan1)=x1((n1)×avganan1...a2)=x1

不妨设 x 1 x_1 x1 为自由变量,用 x 1 x_1 x1 表示其他变量。

观察 ∣ x n ∣ = ∣ x 1 − ( a v g − a n ) ∣ |x_n| = |x_1-(avg-a_n)| xn=x1(avgan) ,可知在数轴上表示 x 1 x_1 x1 a v g − a n avg-a_n avgan 的距离,其余变量也同理。

问题就转变为给定数轴上一些点,找到一个点到所有点的距离和最小。

这个问题的结论为:

  • 点的个数为奇数时,中间的点满足条件。
  • 点的个数为偶数时,中间两个点都满足条件。

证明如下。

  1. 点的个数为奇数时

在这里插入图片描述

设最左边的点和最右边的点一组,依次这样两端为一组。

观察第 1 1 1 组,只有当点的取值在两点之间,到两点的距离之和最短。

  • 因为若在两点之外,距离之和是两点距离 + 多出的距离。
  • 所以只有在两点之间,到两点的距离之和为两点距离,也就是最短的。

同理,第 2 2 2 组,也是在两点之间的点,到两点的距离之和最短。

以此类推,可知 3 3 3 号点到所有点的距离之和最小,也就是中点。

  1. 点的个数为偶数时

证明类似点为奇数时。

总结

所以我们求出来所以数轴上的点 (设为 b b b ),取中点,计算距离。

b b b 可以递推得到:
b i = b i + 1 + a v g − a i b_{i} = b_{i + 1} + avg - a_{i} bi=bi+1+avgai

AC代码

// #pragma GCC optimize(3)
#include <set>
#include <map>
#include <cmath>
#include <stack>
#include <queue>
#include <deque>
#include <cctype>
#include <string>
#include <cstdio>
#include <bitset>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
// #include <unordered_set>
// #include <unordered_map>
#define endl '\n'
#define x first
#define y second
#define fi first
#define se second
#define PI acos(-1)
// #define PI 3.1415926
#define LL long long
#define INF 0x3f3f3f3f
#define lowbit(x) (-x&x)
#define PII pair<int, int>
#define ULL unsigned long long
#define PIL pair<int, long long>
#define all(x) x.begin(), x.end()
#define mem(a, b) memset(a, b, sizeof a)
#define rev(x) reverse(x.begin(), x.end())
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

using namespace std;

const int N = 1e6 + 10;

int n;
LL a[N], sum;

void solve() {
	cin >> n;
	
	for (int i = 1; i <= n; i ++ ) {
		cin >> a[i];
		sum += a[i];
	}
	
	sum /= n;
	
	for (int i = n; i > 1; i -- ) {
		a[i] = sum + a[i + 1] - a[i];
	}
	a[1] = 0;
	
	sort(a + 1, a + 1 + n);
	
	LL res = 0;
	for (int i = 1; i <= n; i ++ ) res += abs(a[i] - a[(n + 1) / 2]);
	
	cout << res << endl;
}

int main() {
	IOS;
		solve();
	
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爬虫与云服务器云数据库

腾讯云轻量应用服务器TDSQL-MYSQL数据库PYTHON做爬虫 实现目标&#xff1a;轻量应用服务器上运行Python爬虫&#xff0c;把数据写到TDSQL-MYSQL数据库中。 最近双十一&#xff0c;趁着这一波福利&#xff0c;在腾讯云购买了一个轻量应用服务器和TDSQL-MYSQL版的数据库。买来之…

OpenGL学习

1.1&#xff0c;状态机-上下文-对象 GPU渲染流程 OpenGL自身是一个巨大的状态机(State Machine)&#xff1a;一系列的变量描述OpenGL此刻应当如何运行。 状态机&#xff1a;变量&#xff08;描述该如何操作&#xff09;的大集合 OpenGL的状态通常被称为OpenGL上下文(Contex…

异构图注意力网络Heterogeneous Graph Attention Network ( HAN )

文章目录前言一、基础知识1.异构图&#xff08;Heterogeneous Graph&#xff09;2.元路径3.异构图注意力网络二、异构图注意力网络1.结点级别注意力&#xff08;Node-level Attention&#xff09;2.语义级别注意力&#xff08;Semantic-level Attention&#xff09;总结前言 异…

微信商城小程序怎么开发_分享微信商城小程序的搭建

如何搭建好一个微信商城&#xff1f;这三个功能要会用&#xff01; 1.定期低价秒杀&#xff0c;提高商城流量 除了通过私域流量裂变&#xff0c;低价秒杀是为商城引流提高打开率的良好手段。 以不同节日作为嘘头&#xff0c;在情人节、38妇女节、中秋国庆、七夕节等日子&…

前端框架 Nuxtjs Vue3 SEO解决方案 SSR

目录 一、Nuxtjs安装 二、路由规则 三、公共布局 四、Vue3中TypeScript的使用 一、Nuxtjs安装 参考&#xff1a;Installation Get Started with Nuxt安装 - NuxtJS | Nuxt.js 中文网Installation Get Started with Nuxt yarn create nuxt-app <项目名> 项目运行…

GAMES101 作业0 环境配置 PC下简单配置i

前言 GAMES101提供了计算机图形学相关教学知识&#xff0c;闫教授及其团队也为大家准备了相应课程作业。课程作业部署在虚拟机上&#xff0c;以便免去环境部署的麻烦。但对于一些同学来说&#xff0c;还是希望直接在WIN的VS上使用并编码&#xff0c;本文对此进行简单说明。 环…

神经网络和深度学习-后向传播back propagation

后向传播back propagation 首先我们要了解&#xff0c;前向传播&#xff0c;损失函数这些前置知识&#xff0c;下面我们给出一张神经网络的图 反向传播通过导数链式法则计算损失函数对各参数的梯度&#xff0c;并根据梯度进行参数的更新 下面举个简单的例子 我们需要知道x,y,…

Linux C网络通信过程

socket函数、sockaddr_in结构体 和 bind函数 socket函数的作用是创建一个网络文件描述符&#xff0c;程序通过这个文件描述符将数据发送到网络&#xff0c;也通过这个文件描述符从网络中接受数据。观察一下socket函数&#xff1a; int listenfd; listenfd socket(AF_INET, S…

NNDL 作业11:优化算法比较

目录 1. 编程实现图6-1&#xff0c;并观察特征 2. 观察梯度方向 3. 编写代码实现算法&#xff0c;并可视化轨迹 4. 分析上图&#xff0c;说明原理&#xff08;选做&#xff09; 5. 总结SGD、Momentum、AdaGrad、Adam的优缺点&#xff08;选做&#xff09; 6. Adam这么好&…

Python威布尔分布

文章目录威布尔分布及其性质在Python中生成威布尔分布的随机数指数分布和拉普拉斯分布的对比威布尔分布及其性质 威布尔分布&#xff0c;即Weibull distribution&#xff0c;又被译为韦伯分布、韦布尔分布等&#xff0c;是仅分布在正半轴的连续分布。 在numpy.random中&#…

python中urllib库的使用

1. 获取目标页面的源码 以获取百度页面源码为例 #使用urllib获取百度首页的源码 import urllib.request#1 定义一个url 作为需要访问的网址 url http://www.baidu.com#2 模拟浏览器向服务器发送请求 response响应 response urllib.request.urlopen(url)#3 获取响应中的页面…

Monkey测试

一、什么是 Monkey 测试 Monkey 测试是通过向系统发送伪随机的用户事件流&#xff08;如按键输入、触摸屏输入、手势输入等&#xff09;&#xff0c;实现对应用程序客户端的稳定性测试&#xff1b;通俗来说&#xff0c;Monkey 测试即“猴子测试”&#xff0c;是指像猴子一样&a…

JVM垃圾回收算法整理

JVM垃圾回收算法整理前言关键概念了解标记–清除算法复制算法标记–整理算法分代收集算法仰天大笑出门去&#xff0c;我辈岂是蓬蒿人前言 大概内容&#xff1a; jvm垃圾回收算法&#xff1a; 1、“标记–清除”算法&#xff1b;首先标记出所有需要被回收的对象&#xff0c;然…

搭建自己的SSR

Vue SSR介绍 是什么 官方文档&#xff1a;https://ssr.vuejs.org/Vue SSR&#xff08;Vue.js Server-Side Rendering&#xff09; 是 Vue.js 官方提供的一个服务端渲染&#xff08;同构应用&#xff09;解 决方案使用它可以构建同构应用还是基于原有的 Vue.js 技术栈 官方文档…

XXL-JOB逻辑自测及执行参数配置踩坑

概述 关于XXL-JOB的使用遇到的问题记录。对XXL-JOB不熟的&#xff0c;可以先参考分布式任务调度平台XXL-JOB深度实战 实战 业务DTO定义如下&#xff1a; Data public class AdAccountDTO {private String accountId;/*** yyyy-MM-dd HH:mm:ss*/private String startCreateT…

ThingBoard源码解析-缓存

配置 TB支持两种缓存&#xff1a;Caffeine和Redis,通过配置cache.type来指定使用哪种缓存。 位于 org.thingsboard.server.cache Caffeine 配置类&#xff1a;CaffeineCacheConfiguration Configuration ConditionalOnProperty(prefix "cache", value "t…

HTML CSS 个人网页设计 WEB前端大作业代码

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【计算机毕业设计】7.线上花店系统maven源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着互联网突飞猛进的发展及其对人们的生活产生至关重要的影响&#xff0c;线上购花&#xff0c;送货到家的购物方式受到了越来越多顾客的接受与喜爱。线上花卉小铺的设计与实现不仅可以带来更广泛的选择与实…

餐饮业如何现业绩突破性增长?

疫情反复无常&#xff0c;餐饮人每天都面临着极大的挑战&#xff1a;无法预测的关店通知、突如其来的禁止堂食命令......餐饮店客流减少&#xff0c;业绩下滑成为不可避免的趋势。 在这种情形下&#xff0c;不少餐饮老板拒绝“躺平”&#xff0c;上演“花式自救”&#xff1a;…

cpu设计和实现(数据预取)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面说过了一条指令经过cpu处理的时候需要经历几个阶段。通过实验&#xff0c;我们发现&#xff0c;哪怕是再简单的ori指令也要经历取指、译码、执…