ARC147题解(A~E)
给定长度为 的序列 ,要求重复执行以下操作,直到 中的元素个数为 :
- 选出下标 ,使得 是 中剩余的数中最大的;选出下标 ,使得 是 中剩余的数中最小的,注意 ;之后将 从序列中删除,若 不为 ,则将其加入序列。
问操作次数。
注意到 后一定是序列中的最小值,因此用一个双端队列维护一个递减的序列即可。
给定一个长为 的排列 ,你需要在不超过 次操作中将其还原为一个递增的排列。
你有两种操作方式:
- 操作 :选择 ,交换 和 。
- 操作 :选择 ,交换 和 。
你需要构造出一种合法的方案,同时满足使用操作 的次数尽可能小。
显然序列可以按照下标的奇偶性分为两部分,操作 不会影响下标的奇偶性,而操作 则能够令其改变。
考虑从大到小还原每个数的位置,设当前要还原的数为 ,倘若 的奇偶性与其下标的奇偶性相同,则直接使用操作 即能将其还原到目标位置。
否则我们要考虑用操作 调位,注意到对于 来说,必然会消耗一次操作 ,但是与其置换的数却有一定的讲究。我们需要让和 置换的数同样满足和小标的奇偶性不一,这样在之后我们能够节省一次操作 。
用操作 调整 的位置,一定能找到这样的数,用操作 与其交换后,再通过操作 移动到最后的位置。
操作次数一定不会超过 ,具体参考冒泡排序,冒泡排序最大的交换次数为 ,我们使用操作 一次跨越两个位置,还要小一些,即 ,通过计算大概在 左右,而每个数调整位置显然也不会令操作次数超过阈值。
给定 个闭区间 ,要求在每个区间中选定一个整数 ,并最小化下式:
显然,题意即要求我们令选定的 个点尽可能的靠近。
对此,有一个较为显然的思路,即选出一个点,之后令所选的点尽可能靠近所选点。
这样我们可以得到一个以所选点为自变量的函数,该函数形如一个二次函数,且开口向上,很自然的想到了三分。
时间复杂度是 。
但这种做法较难以实现,主要的问题在于,这个函数存在一些选点,在这些选点上函数的值不会发生变化,在三分的过程中,就很难判断方向。
不同的三分方式能够通过的测试点不定,幸运的话可以通过,但官方给出的做法非常巧妙。
考虑令 。
这种情况即说明所有区间存在交集,答案为 。
考虑这种情况如何解决。
设 取自 , 取自 ,由于 ,显然有 。设 和 的选点分别为 和 ,即 。
下证对于任意区间 的选点,都有 。
由于 ,结合 与 的定义,所有 都满足 ,故而若存在 或 ,我们可以将他们全部移动到 或 ,这样一定更优。
设 是 的 ,则我们可以将题目给出的式子进行一定的转化:
且由于 ,则进一步简化,可得到 。
对于 的求解,显然,我们可以递归上述过程,于是,最后的答案即为:
注意排序, 递减, 递增。
考虑一个长度为 且关于整数集的序列 ,我们称其为好的序列当且仅当其满足如下条件:
- (可以为空集)是一个整数集,且对于 有 。
- 对于 ,有 和 仅存在一个非公共元素。
定义一个好的序列的权值为 ,其中 表示整数 在序列中的 个整数集中出现过。
给定 ,求所有可能的好的序列的权值和。
限制二是一个十分难以维护的东西,考虑将其设出来。
设 表示 和 的非公共元素。
略作思考后发现,只要确定了 ,我们便可以通过 确定出序列 中的所有元素。
设 表示若元素 在 中出现,在序列 中出现的次数,设 表示若元素 在 中未出现,在序列 中出现的次数。
则对于当前 ,所有不同 的确定出的 的权值和可以被表示为 ,且容易发现,,则该值即为 。
由于 一共有 种不同的选法,所以答案是 。
有 个学生,关于第 个学生有两个不同的参数 和 。
其中 表示第 个学生在某次考试中获得的分数, 表示其想要达标至少要达到的分数。
我们可以交换任意两个学生的得分,从而让 个学生全部达标,于此同时,你希望最后没有被交换的学生数量尽可能多。
考虑如何判断无解。
一个显然的思路是将 和 进行排序,之后从大到小依次匹配,若对于 都有 ,则有解,否则无解。
将此限制简单转化,设 ,其中 表示满足 的元素的数量, 表示满足 的元素的数量。
则对于 ,都必须有 。
有一个很显然的事实,对于所有 的学生,我们必须将他们的成绩进行更换,于是我们将他们扔进集合 ,表示需要被更换的学生,同时我们维护集合 中学生的 ,考虑逐步扩张这个集合。
之后我们找到当前最小的 满足 ,则在剩余学生中找到满足 的学生加入集合 ,且若存在多个,尽量选 更大的学生。原因是我们并不关心 的取值,我们只需要让 的取值尽可能大,从而让其能影响到的 尽可能少。
使用优先队列可以轻松实现如上操作,时间复杂度 。
本文作者:╰⋛⋋⊱๑落叶๑⊰⋌⋚╯
本文链接:https://www.cnblogs.com/Defoliation-ldlh/p/16659278.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步