2.14-2.22做题笔记
2.14 Atcoder Beginner Contest 393
D - Swap to Gather
题目大意
给定一个由 0
和 1
构成的长度为 \(N\) 的字符串 \(S\),且保证字符串中至少包含一个 1
。你可以执行以下操作任意次数(可能为零):
- 选择一个整数 \(i\) ,交换字符串中第 \(i\) 个字符和第 \(i+1\) 个字符。
任务是找出将所有的 1
聚集成一个连续块所需的最小操作次数。所谓的连续 1
是指在字符串中,存在一个区间 \([l,r]\),使得该区间内的所有字符都是 1
,而区间外的字符均为 0
。
解题思路
考虑如何高效地将所有的 1
聚集到一起:
遍历字符串,找出所有 1
出现的索引位置,将这些位置存入一个数组 pos
。
观察到,当 1
聚集到所有 1
位置的中位数周围时,所需的操作次数是最小的。
计算最小交换次数时,需要将所有 1
移动到一个连续的区间内。计算当前 1
位置和目标位置(基于中位数的连续区间)之间的绝对差值之和。
时间复杂度是 \(O(N)\)。
E - GCD of Subset
题目大意
给定一个长度为 \(N\) 的序列 \(A=(A_1,A_2,…,A_N)\) 和一个正整数 \(K\)。对于每个元素 \(A_i\),解决如下问题:
- 选择 K 个包含 \(A_i\) 的元素,求出这些元素的最大公约数。
解题思路
-
使用一个数组
freq
来记录每个元素出现的次数。 -
对于每个可能的数 \(d\),我们要计算出它所有倍数的出现频率。即,\(d\) 的倍数是 \(d,2d,3d,\dots\) ,累加这些数的出现次数。
-
对于每个 \(d\),如果它的倍数的出现次数大于或等于 \(K\),说明我们可以选出至少 \(K\) 个元素,且它们的 \(\operatorname{GCD}\) 至少是 \(d\)。然后,遍历它的倍数,并更新这些倍数对应的最大 \(\operatorname{GCD}\)。
时间复杂度:\(O(N \log N)\)。
F - Prefix LIS Query
题目大意
给定一个长度为 \(N\) 的序列,\(Q\) 个查询,每个查询提供了两个整数 \(R_i\) 和 \(X_i\),要求在序列的前 \(R_i\) 个元素中,找到一个递增的子序列,其元素值都不大于 \(X_i\),并且求出这个子序列的最大长度。
解题思路
树状数组(Fenwick Tree)和离散化。
- 离散化
- 对于每个查询,需要求出在前 \(R_i\) 个元素中,值不大于 \(X_i\) 的递增子序列的最大长度。使用动态规划与树状数组:
- 树状数组维护一个区间内的递增子序列长度信息。
- 对于每个元素
A[i]
,我们可以查询树状数组中小于A[i]
的最大值,然后更新当前元素的递增子序列长度。 - 使用树状数组进行更新和查询,使得每次查询的时间复杂度为 \(O(\log N)\)。
- 按 \(X_i\) 排序查询,并按升序依次处理查询。这样可以保证在处理每个查询时,所有小于等于 \(X_i\) 的元素已经被处理过了。
2.22 CYEZ 作业 [ROIR]
P11701 [ROIR 2025] 平方差
题目大意
给定三个整数 \(d,l,r\),我们需要求出满足以下条件的自然数对 \((x,y)\) 的数量: $ l \leq y^2 < x^2 \leq r \(,\)x^2 - y^2 = d$。
我们需要根据这些条件,统计出符合条件的 \((x, y)\) 数对的个数。
解题思路
通过因子分解 \(d\),得到可能的 \(x−y\) 和 \(x+y\),计算出 \(x\) 和 \(y\)。
验证 \(x\) 和 \(y\) 是否满足条件 \(l \leq y^2 < x^2 \leq r\),并统计符合条件的数对。
P11702 [ROIR 2025] 不平衡划分
题目大意
给定一个非负整数数组 \([a_1, a_2, \dots, a_n]\),将其划分为 \(k\) 个连续子段,求出最大不平衡度。不平衡度为每个子段和的最大值与最小值之差。
解题思路
通过计算前缀和来快速获取子段和。使用动态规划思想维护左边最小值和右边最小值,考虑三种情况:划分左边段、右边段以及中间段。利用这些信息计算出最大不平衡度。
P10205 [JOI 2024 Final] 室温 / Room Temperature
题目大意
给定 \(N\) 位高管,每位高管有一个舒适温度,穿外套会导致舒适温度下降。房间的温度设定为 \(x\),我们需要调整房间温度使得所有高管的不舒适度最小。不舒适度是房间温度与每位高管舒适温度的差的绝对值。每位高管穿外套可以使其舒适温度降到某个值。求使得房间不舒适度最小的温度设定。
解题思路
通过对每位高管的舒适温度对 \(T\) 取模,将问题转化为一个相对温度差问题。排序后计算相邻温度差的最大值,然后根据最大差值推算出最小不舒适度。
P11698 [ROIR 2025] 不完全质数
题目大意
给定两个非常大的整数 \(l\) 和 \(r\),要求计算区间 \([l, r]\) 中不完全质数的数量。一个数字被称为不完全质数,当它的各位数字之积是一个质数时。例如,\(12\) 是不完全质数,因为 \(1 \times 2 = 2\) 是质数。
解题思路
通过将每个数字的各位数字的乘积计算出来并检查其是否为质数来判断该数字是否是“不完全质数”,数位 dp 模板。
P11703 [ROIR 2025] 个人 OI 比赛的原则
题目大意
在 OI 比赛中,每道题目有多个子任务,每个子任务都有一定的分数。如果一个子任务得分为 \(0\),则该题目得分为 \(0\)。你需要计算是否能恰好获得总分 \(s\),并且输出一种可行的子任务选择方案。
解题思路
- 使用动态规划来判断是否能恰好获得 \(s\) 分。
- 设
f[i][u]
表示在前 \(i\) 道题中,是否能通过选择一些子任务得到 \(u\) 分。 - 每道题目中,每个子任务的选择可以看作是背包中的物品选择。
一旦 DP 表明可以达到总分 \(s\),使用 DFS 回溯来找出选择的具体子任务,并输出每道题目选择的子任务编号。