首页 > 其他分享 >Brick

Brick

时间:2024-05-08 22:33:06浏览次数:16  
标签:奇数 sum mid 变为 Brick 2k

Brick

题目描述

有 \(n\) 堆砖,首尾相连构成一个环,每次可以将相邻两堆砖同时加或减一,最后要求使用最少操作次数的情况下将所有砖堆变为尽量小的同一高度。

如果无法达到同一高度,则无解。

解题思路

设 \(x_i\) 表示同时修改 \(a_i\),\(a_{i+1}\) 的量(带正负),\(L\) 表示最终高度。

可以列出方程:

\[\begin{cases} x_1 + x_2 = L - a_2 \\ x_2 + x_3 = L - a_3 \\ \dots \\ x_n + x_1 = L - a_1 \end{cases} \]

操作次数为 \(\sum |x|\)。

当 \(n\) 为奇数时:

把每一条方程加起来:

得出 \(2 \times \sum x = nL + \sum a\) 。

\(L\) 可以随便取值,与 \(\sum a\) 奇偶性相同即可有解。

所以可以先取定 \(L\) 为 \(0\) 或 \(1\)。然后将奇数位除最后一条式子全部相加得到 \(\sum_{i\in[1,n)} x\) 求出 \(x_n\),推到出所有的 \(x\)。

考察 \(L\) 变为 \(L + 2D\) 对于 \(x\) 的影响。

其可以使得所有的 \(x\) 变成 \(x + D\),即可以任意平移。

根据经典结论,我们只需要将中位数移到 x轴 上即可使得 \(\sum |x|\) 最小。

\(D = -x_mid\),即可求出 \(L\)。

当 \(n\) 为偶数时:

将奇数位的式子相加得到 \(\sum x = (n / 2) L + \sum_{i = 2k+1} a_i\),将偶数位式子也相加得到 \(\sum x = (n / 2) L + \sum_{i = 2k} a_i\)。

所以如果 \(\sum_{i=2k+1} a_i = \sum_{i=2k}\) 那么方程有解,否则无解。

先定 \(L\) 为 \(0\)。

考察 \(L\) 变为 \(L + 2D\) 对于 \(x\) 的影响。其与 \(n\) 为奇数的情况相同。

考察 \(x_1\) 变为 \(x_1 + Y\) 对于 \(x\) 的影响。

其会使得 \(x_{i \in 2k+1}\) 变为 \(x_{i \in 2k+1} + Y\),\(x_{i \in 2k}\) 变为 \(x_{i \in 2k} - Y\)。

总的来说通过调整 \(D\) 与 \(Y\),我们会使得 \(x\) 发生一下变化。

  • 使 \(x_{i \in 2k+1}\) 变为 \(x_{i \in 2k+1} + D + Y\)。
  • 使 \(x_{i \in 2k}\) 变为 \(x_{i \in 2k} + D - Y\)。

设 \(D + Y = A\),\(D - Y = B\)。

显然 \(A\) 与 \(B\) 可以取任意值。

所以我们只要将这两组 \(x\) 的中位数移动到 x轴 上即可。

即 \(A = -x_1[mid]\),\(B = -x_2[mid]\)。

解出 \(D\),\(Y\) 即可求出答案。

代码实现

我们可以使用 nth_element 在 \(O(logn)\) 的时间内找到中位数(此函数不止此功能),所以总的时间复杂度为 \(O(n)\)。

使用 namespace 之类的可以有效分离两种情况,避免变量冲突。

代码链接

标签:奇数,sum,mid,变为,Brick,2k
From: https://www.cnblogs.com/DeepSeaSpray/p/18181046

相关文章

  • 韩国链游Redbrick名牌零撸教程
    简介:Redbrick是一个基于UGC的元宇宙平台,类似蛋仔派对的游戏,可玩性挺高的,融资1370万美金,是韩国本土项目,韩国项目还是需要注意一下的,上一个超级大毛ZTX也是韩国项目,还有一点就是这个项目非常非常非常冷门,0撸可冲相关概念:GameFi、元宇宙融资信息:融资1370万美元,见下图Airdrop计......
  • A. Brick Wall
    原题链接题解要让水平块尽可能多,垂直块尽可能少垂直块最少为零,也就是说,一行里全部都是水平块,可不可能?答案是可能的,一定存在某种组合使得水平块刚好塞满一行那么这种方块数最多的组合是多少?每个方块长度都为2,如果\(m\)为奇数,最后一个方块长度为3题解#include<bits/stdc++.......
  • 《PySpark大数据分析实战》-14.云服务模式Databricks介绍基本概念
    ......
  • 【Azure Key Vault】在Azure Databricks上获取Azure Key Vault中所存储的机密(secret)
    问题描述在AzureDatabricks上获取AzureKeyVault中所存储的机密(secret)的两种方式? 问题解答方式一:在Databricks的Notebook中,直接编写Python代码读取KeyVault的Secret实例代码如下:importosfromazure.keyvault.secretsimportSecretClientfromazure.identityim......
  • 2022 Hubei Provincial Collegiate Programming Contest G. Brick(gym103729)
    大意给出底层高度,用1*2的砖块将总形状铺成等高矩形,使得高度最小(不能放在外面)题解奇妙做法当高度同奇偶时显然x可以的话x+2也可以,直接加一层竖的,所以首先分奇偶二分高度有解的必要条件1是,把矩形黑白方格染色之后未填的黑=白(一个1*2刚好覆盖1黑1白)然后从左往右放砖块,可以感受......
  • LAXCUS:私域部署的DataBricks​
    随着大数据技术的不断发展,越来越多的企业开始关注数据的价值和应用。Databricks作为一家开源的大数据平台,为企业提供了强大的数据分析和处理能力。然而,传统的Databricks部署方式存在一定的局限性,比如需要依赖于云服务提供商的基础设施,无法满足企业的私有化和自定义功能需求,尤其对于......
  • Databricks Cluster vs SQL Warehouses - SuperOutlier
    Forward:https://www.superoutlier.tech/databricks-cluster-vs-sql-warehouses/ IfyouareusingaDatabrickspremiumaccount,youseeSQLpersonalalongwithDataEngineeringandMachineLearning.IfyouareusingDataEngineeringorMachineLearning,yo......
  • 如何在Databricks中使用Spark进行数据处理与分析
    目录《如何在Databricks中使用Spark进行数据处理与分析》随着大数据时代的到来,数据处理与分析变得越来越重要。在数据处理与分析过程中,数据的存储、处理、分析和展示是不可或缺的关键步骤。在数据处理与分析中,Spark是一个强大的开源计算框架,它可以处理大规模分布式数据集,并提......
  • gluster迁移brick故障
    前言:笔者的环境是三个节点的gluster集群,用的是分布式复制卷,由于数据量日益增大,需要增加brick以扩容,本篇文章将介绍brick扩缩容的常见故障及解决方法。基础操作命令:(1)添加brickglustervolumestopmybackupglustervolume add-brickmybackupreplica3glusterfs-a:/storage/phd4......
  • azure databricks使用external hive metastore跨工作区共享元数据
    为什么要使用externalhivemetastore可以跨workspace的共享元数据,不用每次创建workspace的时候都重复的把元数据重建一次。更好的元数据集中管理,Createonce,useeverywhere。为灾难恢复(DR)做好为准备,并降低复杂性。(PAAS一样会存在意外的,不要以为不会,所以DR是必须的)可以更好控......