好题合集

2yh_Z77 Lv1

1. AGC015F Kenus the Ancient Greek

  • 定义 为执行 (辗转相除)所需要的步数。
  • 次询问,给定 ,求 , 的 最大值,
  • 以及达到了最大值的 个数, 对 取模。
  • 数据范围: 。

第一问考虑倒推,每一步让两个数尽量小:

发现答案就是最大的 , 使得: , 。

思考第二问,不妨只统计 且满足条件的二元组。

我们设 为第一问所求范围内最大次数。

显然,如果 ,无论第一问为多少,它都无贡献。

我们会发现符合 为一定值 的组数量很多。

而经过一次辗转相除会使得其中很多变得相同,且 。

实际代表了变换前

对于一定值 ,我们可以打出变换后二元组的表:

发现第 行由第 行通过 变换再多加一组。

多加的正是第 行的第 个通过 变换。

为什么?

对于 ,如果过大会导致最大值变大从而无贡献。

所以第 行首先要求范围 。

我们从第 行中的二元组回推,每组 变换合法。

而 的变换中只有 时,

用第 行第 组变换,即:

时合法。

() 。

得到了对于最大值对应的变换后的每个二元组 ,

我们可以简单的计算出变换前的二元组数量。

于是我们 预处理出变换后的二元组,

对于每个询问 的计算符合条件的二元组数量。

就可以了。

2. AGC013F Two Faced Cards

  • 给定一个包含 个二元组的集合 和一个包含 个数的数组 ,存在 次相互独立的询问。
  • 每次询问向 中加入一个新给的二元组,在每个二元组的两个数中选一个,并将选出的数与 中数两两配对,使得每组配对中来自 的数小于等于来自 的数。
  • 要求出选出数是二元组中第一个数的最大数量,存在无解。
  • 数据范围: 。

因为我们要最大化选第一个数的数量,那就先全部选第一个数。

然后我们考虑如何判断能否将选出的数与 中数两两配对成功,

我们可以对两组数排序后检查,但更好的是利用 Hall 定理判断。

具体地,先对所有数离散化,然后可以拿个数组 ,

对从 中选出的数做后缀加,对 中的数做后缀减,

就只需要保证 中的元素新最后都大于等于 。

这个方法的优势就在于,我们很好反悔,

我们可以直接对 第二个数,第一个数 做区间加。

对于每个询问我们枚举选哪个数,条件就变成了 。

我们找到满足 最大的 ,

可以证明包含它且左端点最小的区间必选。

  • ps:证明不想写,看这里 比较好。

这样我们从后往前一直选,可以使得 。

最后我们从前往后选最少的区间依次满足 的条件即可。

我们每次贪心选择包含当前 且右端点最大的区间,就可以了。

3. 牛客24157E斐波 超级加强版

  • 序列 { } ,满足递推 ,其中 , 给定。
  • 是一个可重集合 ,给定 ,设 为 。
  • 给定一个数组 ,存在 次操作,每次操作是其中一种:
  • 1.把 变为 。
  • 2.计算 ,输出答案模 。
  • 数据范围: 。

考虑直接求通项,设 。

则 ,化简 :

我们后面其实只要求出形如 的东西就行了。

考虑每个位置的权值对这个式子上面的指数的贡献,就是 。

拿线段树维护区间内这 种 的 即可。

其实需要特判 的情况,此时 ,难以维护。

4. 【UR#18】在路上了

  • 有一个 个点的完全图,每条边染红色或蓝色。
  • 已知对所有 ,连接 和 的连边为红色。
  • 交互,可以询问 次,每次询问 和 之间边的颜色。
  • 你需要找到一条由 个点 条边组成的路径,满足所有边的颜色相同。
  • 数据范围: 。

yhx 写的极为清楚,我就不想写了。

5. ZROI21省选D2T2 商人

  • 未来 天的物品价格可能是 枚金币或者 枚金币,每天可以买入一个、卖出一个或者什么都不做。
  • 最初你有无限的金币,你想用最优策略从中获利,问 ~ 时,有多少种价格情况可以使你最多赚到 枚金币 。
  • 数据范围: ; ; 。

显然的,我们只有在价格为 枚金币时买入,价格为 枚金币时卖出才能最大获利。

我们将价格序列看成一个长度为 的括号序列,我们的 就是当前对应括号序列的最长合法子序列的长度。

  • 得到 分的做法:设 表示当前到第 天匹配了 对括号前面还剩下 对括号的方案数,很好转移。

考虑拿出最长合法子序列后剩下的括号序列,可以发现一定是一段前缀右括号,一段后缀左括号。

这些可以插在最长合法自序列的前面后面或者几段括号之间,可以设 表示当前到第 天分成了 段的方案数。

  • 组合数和卡特兰数转移,卷一下 分,拉格朗日反演 分。

想想其他的做法,经典的我们可以拿括号序列上折线,设左括号有 个,最小前缀和为 并且不妨 。

起点在 ,终点在 ,差分,此时赚取的金币数 时, 。

所以折线不能经过下方的水平线 ,则方案数为 。

  • 于是我们对于每一个 求出 ,就可以了。

6. AGC011F Train Service Planning

  • 有一条被 个站台分为 段的铁路,站台标号为 ,铁路标号为 。
  • 列车通过第 段所需时间为 ,铁路可能是双向的或单向的,你需要设计一张列车时刻表 。
  • 对于所有的列车,要么从站台 前往站台 ,要么从站台 前往站台 。
  • 在单向铁路上,不能有两辆相反方向的车互相穿过,列车只能在站点停车等待 。
  • 给定一个常数 ,若有一辆开往 的车在时刻 到达站点 ,在时刻 离开站点 ,
  • 则下一辆车恰好在时刻 到达站点 ,在时刻 离开站点 。
  • 求时间表中列车开一次来回的最短时间,或指出无解, 。

存在 时无解,否则一定有解。

设 为 的列车在站台 等待的时间,

为 的列车在站台 等待的时间,

。

则模 意义下 的列车在第 条铁路上的时间为 ,

的列车在第 条铁路上的时间为 。

我们发现对于一条单向铁路,我们要求区间不交,

即 不在 中,在其补集 中。

我们就只需要在一个数轴上,随便选个点开始走 步,

满足走完 步后当前点在 中,求最小路径长度。

我们发现 单调不降,也就是点都是往正方向走,到 就回到 。

所以我们可以设 表示第 次操作后走到 的最小路径长度。

,于是我们只要维护 的区间 即可。

7. AGC058C Planar Tree

  • 圆周上有 个顶点。顶点按顺时针顺序编号为 到 ,顶点 上写着整数 。
  • 接下来通过在顶点间连 条边使得顶点连成一棵生成树,需要满足以下两个条件。
  • 如果 有边向连,需要满足 将边画成线段,不能有两条线段相交。
  • 已知序列 ,判断是否可以构造满足条件的生成树,有 组数据。
  • 数据范围: , 都出现过。

当时晚上在酒店会议室想了蛮久还是不会。首先可以找到性质:

  • 相邻且权值相同的两点可以合并。
  • 相邻的 可以删去 ,相邻的 可以删去 。

第一条比较显然,第二条证明(以 为例)如下:

显然这样的相邻两点连边不劣于不连边,接下来证明删掉 的可行性。

我们如果不删掉 ,并用 与其他的 连边,我们来讨论这些连边割出的弧上的点集。

如果点集中没有 ,即只有 ,那可以用性质 1 合并,变成 的局面。

由于只有一段 符合,所以与其连上边后,就可行性只需要后面的情况可行即可。

如果点集中没有 ,有 ,那么原本的可能有解,变成了必定无解,变劣了。

如果点集中有 或 ,那“其他的 ”往点集内的连边可用与 相邻的 往其内连边代替。

于是我们尽可能地用完这两个性质之后,我们会发现相邻的权值组合只剩下 。

考虑三个相邻点,以 为前两个权值,后面一个点的权值为 或 。

先把第二个的点向第一个点连边,删去第二个点,发现正好又可以对第一、三个点使用性质合并。

最后相当于是删去了一个 或 ,同理 也可以删去。

可以多多手玩,发现只有 “ “、” “、” “、

“ “、” “和” “这几种无法继续删 。

其中可以继续连边到符合条件的只有 ,判断的条件可以直接简化为 。

zyf 和 zhy 有一种把一些权值连续段组合做优先级排序的做法,写了6k,恐怖如斯。

8. ZROI21联赛D15T3 水管工

  • 给定一棵树,需要选择若干点对 ,覆盖这些点对两点之间的简单路径,满足每条边都被覆盖 次。
  • 如果存在 组 个相同点对,方案的权值就为 ,你需要求出所有方案的权值之和,对 取模。
  • 数据范围: 。

思维难难难,首先考虑把一条树边拆成两条边,我们在每个结点处匹配边对。

我们构造一种合法方案,并钦定好每条边所属的简单路径。

显然对于同一条树边的两条边考虑是否交换它们所属的简单路径,我们发现几乎可以得到所有的匹配方案。

但是对于每组相同点对,它们的每种匹配方案两两对应相同,所以每个选择方案对应 种匹配方案。

因为选择方案权值为 ,所以计算权值和就可以转化为匹配方案数除以 ,考虑dp 。

设 表示考虑前 条边的匹配方案数,我们先后加入同树边对应的两条边。

, ,需要多画图理解。

题解设的 让我在理解 dp 上绕了很多弯,也有可能是我没领悟到。

9. ZROI21省选D2T3 防御工事

  • 给定一张 个点 条边的图,对于每个询问,给定 个点,你需要在图中选择一个点作为首都。
  • 再选择除首都外的一个点建立防御,此时权值定义给定点不经过建立防御的点且可以到达首都的数量的和。
  • 定义选择此首都的权值为选择每个除首都外的点建立防御时的权值的和,求每个点作为首都的权值的最大值。
  • 数据范围:, ,保证图连通。

水一道题/se,图上的连通性问题建出圆方树,然后 又可以在圆方树上建虚圆方树。

可以在虚圆方树上进行换根 dp ,细节很多。

10. ARC061F Card Game for Three 超级加强版

  • 三个人每个人有一堆牌,三堆牌中分别有 张牌,每张牌上写了下一个摸牌人的编号。
  • 从第一个人开始摸牌,每次摸牌堆顶部的牌,有人把牌摸完就结束,计算 种方案中第一个人摸完的方案数。
  • 数据范围:, 。

水一道@xsi /kel/kel 。

首先考虑对于摸到牌的序列,枚举第一个人摸完的时候,第二个人和第三个人在序列中出现次数来计算答案。

。

设 ,则 。

线性计算系数: 。

  • 标题: 好题合集
  • 作者: 2yh_Z77
  • 创建于 : 2022-09-28 22:02:16
  • 更新于 : 2023-11-08 10:24:33
  • 链接: https://zyh277.github.io/2022/09/28/好题合集/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。