CF2063 无意之间的补题记录

TD Game With Triangles 2000
题目大意
平面上有
- 选择三个不共线的不同点;
- 将得分增加这三个点形成三角形的面积;
- 从平面中删除这三个点。
游戏示例,其中执行了两次操作。设
请找出
解答
这道题赛时想到了思路,但是因为时间不够没有调出来。然后掉到了 1800 多名去了(Codeforces Round 1000)。Yee tour fen.
容易发现,选线段肯定是选最两边的,选点肯定是选最中间的。这样是最优的。那么我们首先给点排序(题目里没说序列有序!!),然后就可以开始贪心选:每次选线段就比较一下
但是这个时候,你会遇到在
那么边界
那么就可以列出不等式:
联立可得
又因为两侧选点的极限是
于是这道题就做完了。
代码
1 |
|
TE Triangle Tree 2300
题目大意
给定一棵以节点
定义函数
- 若
是好对,则 为满足以下条件的整数 的数量:存在一个由边长 、 和 构成的非退化三角形 。 - 否则,
。
你需要计算以下值:
解答
以
我们可以列出来两种情况:
- 当
和 互不为祖先时:
- 否则,
和 一个是另一个的祖先,
那么就可以把式子分成 4 个部分:
计算所有的
。对于每一个 ,它的贡献次数很明显是 次。因为以其为端点最多也就只有 种情况。 计算所有的
。这个可以后面 DFS 出 的值之后,先将其排一个序,然后再从小到大,利用前缀和来计算。 计算所有的
。注意到 的情况是只会发生在 和 互不为祖先的情况。所以可以先算出所有 和 一个是另一个的祖先的情况,然后再用所有的情况减去这个数。这种情况可以当 DFS 完某一个点 的时候,就把答案加上 。因为它的后代都和这个点造出来了一个是另一个的祖先的情况。 计算所有的
。我们可以在 DFS 某个点 的时候,钦定现在算的 就是 。那么 为 的情况就只有两种: - 两个节点都是它的后代,并且这两个节点分别在两个不同儿子的子树里。也就是存在
, , 。这种情况的答案就是列举所有两个不同的儿子 , 。那么算这个并且复杂度要正确,就可以使用前缀和,既能时间复杂度正确,也可以消掉前面不必要的 。 - 一个节点是
,另一个节点 。这种情况只有 种。
所以情况数
就为这两个答案加起来。它对总答案的贡献就是 。 - 两个节点都是它的后代,并且这两个节点分别在两个不同儿子的子树里。也就是存在
代码
1 |
|
TF1 Counting Is Not Fun (EZ) 2400
题目大意
这是该问题的简单版本。与困难版本的区别在于,此版本对
一个括号序列被称为平衡的,当且仅当其可以通过以下形式文法构造:
- 空序列
是平衡的。 - 若括号序列
是平衡的,则 也是平衡的。 - 若括号序列
和 是平衡的,则拼接序列 也是平衡的。
例如,序列 “(())()”、”()”、”(()(()))” 和空序列是平衡的,而 “(()” 和 “(()))(“ 则不是。
给定一个平衡括号序列
Emily 将与 John 进行括号猜谜游戏。游戏规则如下:
初始时,John 有一个包含
在
:序列 包含好对 。
John 给出的线索互不相同且互不矛盾。
在某个时刻,Emily 可以确定满足当前所有线索的平衡括号序列是唯一的。例如,假设 Emily 知道
为了尽早确定
解答
这道题因为
因为每一个合法的括号对,可以把整个序列分为内外两部分。
然后整个序列就被分成了一个类似树形的结构。
然后就会发现,对于每一个树上的节点以及其代表的区间
代码
1 |
|
TF2 Counting Is Not Fun (HD) 2700
题目大意
与 TF1 的题意完全一致,但是加强数据范围,
解答
书接上回,上一道题造成时间复杂度过大的原因就是使用了模拟的做法。我们需要优化这个做法使得复杂度为
这个时候,我们就需要维护一个树形结构。这个树上的每一个点都维护了这个点对应区间的
首先我们把一棵完整的树建出来。那么就可以开始删点了。我们维护一个答案
代码
1 |
|
- Title: CF2063 无意之间的补题记录
- Author: 11490DX
- Created at : 2025-03-05 10:00:47
- Updated at : 2025-03-05 11:09:59
- Link: https://11490dx.net/2025/03/05/CF2063-complete/
- License: This work is licensed under CC BY-NC-SA 4.0.