| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【板刷 educational round】Educational Codeforces Round 2 A - F -> 正文阅读 |
|
[数据结构与算法]【板刷 educational round】Educational Codeforces Round 2 A - F |
总结涉及到的知识点为二分、计算几何、树上启发式合并、二分图最小边染色。 二分时要注意未找到时需要特判。计算几何被卡精度时要能想到哪里可能被卡。树上启发式合并是一种优秀的dfs序莫队替代品,适用于无修改的子树相关问题。学会了二分图最小边染色。 A - Extract Numbers题意给定长度为 1 0 5 10 ^ 5 105 的字符串,逗号和分号将其分为若干字串,判断每个字串是否为整数的形式。 思路模拟,复杂度 O ( n ) O(n) O(n) 。 代码
B - Queries about less or equal elements题意给定两个长度为 2 × 1 0 5 2 \times 10^5 2×105 的整形序列 a a a, b b b,对 b b b 中每一个元素 b i b_i bi? 求 a a a 中有多少个元素不大于 b i b_i bi? 。 思路将 a a a 排序后,二分找到最后一个小于等于 b i b_i bi? 的点,如果找到的点的坐标为 0 0 0 ,答案可能是 0 0 0 或 1 1 1,需要再check一下。复杂度 O ( m ? n log ? n ) O(m \cdot n \log n) O(m?nlogn) 。 代码
C - Make Palindrome题意给定长度为 2 × 1 0 5 2 \times 10^5 2×105 的字符串,可以使用 1 1 1 代价将其中一个字符转化为任意字符,可以使用 0 0 0 代价将这个字符串重新排列。求在代价最小的情况下可以变成的字典序最小的回文串。 思路对于任意一个字符串,我们统计每个字符出现的次数,只有所有字符出现次数均为偶数或仅一种字符出现次数为奇数时,这个字符串才能被重新排列成回文串。 如果题目给出的字符串恰好符合上面的情况,直接重新排列后输出即可。给定的字符串不满足上述条件时,我们选择两种出现次数为奇数的字符,取出其中一种字符中的一个,使用 1 1 1 代价将其转换为另一种字符,这样就会减少两种出现次数为奇数的字符,不断进行上述操作就可以使字符串满足上述条件。 当每次进行转换时,我们选择 ASCII 码最大的字符转化为 ASCII 码最小的,这样转化是最优的。 考虑将字符串重新排序这一步骤,如果字符串中存在出现次数为奇数的字符,那么必须要将一个这种字符放在答案的正中间,这样以后所有字符出现次数均为偶数。我们将每种字符分成两等份,各一份放在前半部分升序,各一份放在后半部分降序。 复杂度 O ( n ? log ? 26 ) O(n \cdot \log 26) O(n?log26) 。 代码
D - Area of Two Circles’ Intersection题意求两圆的面积交。 思路模板题,但板子被卡精度了,改一改才能过去。 对于外切、相离、内含、内切的情况特判并返回。只需要考虑相交的情况。 在 △ A O 1 O 2 \triangle AO_1O_2 △AO1?O2? 中,根据余弦定理得 ∣ O 1 A ∣ 2 + ∣ O 1 O 2 ∣ 2 ? ∣ A O 2 ∣ 2 = 2 ? ∣ O 1 A ∣ ? ∣ O 1 O 2 ∣ ? cos ? ∠ A O 1 O 2 {\vert O_1A \vert}^2 + {\vert O_1O_2 \vert}^2 - {\vert AO_2 \vert}^2 = 2 \cdot {\vert O_1A \vert} \cdot {\vert O_1O_2 \vert} \cdot \cos\angle{AO_1O_2} ∣O1?A∣2+∣O1?O2?∣2?∣AO2?∣2=2?∣O1?A∣?∣O1?O2?∣?cos∠AO1?O2? 得到 ∣ O 1 H ∣ = ∣ O 1 A ∣ ? cos ? ∠ A O 1 O 2 ? ∣ O 1 A ∣ 2 + ∣ O 1 O 2 ∣ 2 ? ∣ A O 2 ∣ 2 2 ? ∣ O 1 O 2 ∣ \vert O_1H \vert = \vert O_1A \vert \cdot \cos\angle{AO_1O_2} \cdot \frac{{\vert O_1A \vert}^2 + {\vert O_1O_2 \vert}^2 - {\vert AO_2 \vert}^2}{ 2 \cdot {\vert O_1O_2 \vert}} ∣O1?H∣=∣O1?A∣?cos∠AO1?O2??2?∣O1?O2?∣∣O1?A∣2+∣O1?O2?∣2?∣AO2?∣2? ∠ A O 1 O 2 = arccos ? ∣ O 1 H ∣ ∣ O 1 A ∣ \angle {AO_1O_2} = \arccos \frac{\vert O_1H \vert}{\vert O_1A \vert} ∠AO1?O2?=arccos∣O1?A∣∣O1?H∣? ∠ A O 2 O 1 = arccos ? ∣ O 1 O 2 ∣ ? ∣ O 1 H ∣ ∣ O 1 A ∣ \angle {AO_2O_1} = \arccos \frac{\vert O_1O_2 \vert - \vert O_1H \vert}{\vert O_1A \vert} ∠AO2?O1?=arccos∣O1?A∣∣O1?O2?∣?∣O1?H∣? 扇形 O 1 A B O_1AB O1?AB 的面积 a r e a 1 = ∣ O 1 A ∣ 2 ? ∠ A O 1 O 2 area_1 = {\vert O_1A \vert}^2 \cdot \angle{AO_1O_2} area1?=∣O1?A∣2?∠AO1?O2? 扇形 O 2 A B O_2AB O2?AB 的面积 a r e a 2 = ∣ O 2 A ∣ 2 ? ∠ A O 2 O 1 area_2 = {\vert O_2A \vert}^2 \cdot \angle{AO_2O_1} area2?=∣O2?A∣2?∠AO2?O1? 多边形 A O 1 B O 2 AO_1BO_2 AO1?BO2? 的面积 a r e a 3 = ∣ O 1 A ∣ ? ∣ O 1 O 2 ∣ ? sin ? ∠ A O 1 O 2 area_3 = \vert O_1A \vert \cdot \vert O_1O_2 \vert \cdot \sin{\angle{AO_1O_2}} area3?=∣O1?A∣?∣O1?O2?∣?sin∠AO1?O2? 答案为 a r e a 1 + a r e a 2 ? a r e a 3 area_1 + area_2 - area_3 area1?+area2??area3? 因为精度问题,多边形面积公式应该改为 a r e a 3 = 1 2 ∣ O 1 A ∣ ∣ O 1 B ∣ sin ? ∠ A O 1 B + 1 2 ∣ O 2 A ∣ ∣ O 2 B ∣ sin ? ∠ A O 2 B area_3 = \frac{1}{2} \vert O_1A \vert \vert O_1B \vert \sin\angle{AO_1B} + \frac{1}{2} \vert O_2A \vert \vert O_2B \vert \sin\angle{AO_2B} area3?=21?∣O1?A∣∣O1?B∣sin∠AO1?B+21?∣O2?A∣∣O2?B∣sin∠AO2?B 代码
E - Lomsat gelral题意给一棵含有 n n n ( n ≤ 1 0 5 ) (n \leq 10^5) (n≤105) 个结点的树,每一个结点 i i i 有一种颜色 c i c_i ci? ( 1 ≤ c i ≤ n ) (1 \leq c_i \leq n) (1≤ci?≤n) ,对于每一个结点,求出其子树出现次数最多的颜色的颜色和。 思路树上启发式合并(dsu on tree)的模板题目。推荐学习视频 【AgOHの算法胡扯】树上启发式合并(dsu on tree) 首先要知道轻重儿子的概念。对于一个结点的多个儿子,所在子树结点最多的儿子成为重儿子,其余儿子均称为轻儿子。可以先使用一遍dfs处理出所有结点的重儿子。 接下来再进行一遍dfs求出答案。这次dfs过程中,一边搜索,我们要一边维护一个数组 需要注意的是,对于当前结点
u
u
u ,搜索完每一个轻儿子,都需要把这个轻儿子的贡献删除掉。这样做是为了防止在连续搜索两个轻儿子时,第一个对 还需要注意的是, 代码
F - Edge coloring of bipartite graph题意给定点数 1000 1000 1000 边数 1 0 5 10^5 105 的 二分图,求最小边染色(给每一条边染一个颜色,有公共点的边颜色不能相同,求至少需要多少种颜色)。 思路有一个结论:二分图的最小边染色为点的最大度数。 枚举所有边,对于每一条边的起点 s s s 和终点 t t t ,分别找到它们最小的可选颜色 c 1 , c 2 c1, c2 c1,c2,如果 c 1 = c 2 c1 = c2 c1=c2 ,直接将这条边染成这个颜色;否则。需要将其中的一个点的连边方式进行调整再染色。 调整方式如下。 c 1 ≠ c 2 c1 \neq c2 c1?=c2 时,如果 c 2 < c 1 c2 \lt c1 c2<c1 ,那么直接将这条边染色成 c 1 c1 c1 是合法方案,我们就直接这样做;如果 c 2 > c 1 c2 \gt c1 c2>c1 ,说明点 t t t 已经存在一条邻边被染成了 c 1 c1 c1,我们先强行将当前边染色成 c 1 c1 c1,再将与其产生冲突的边调整为 c 2 c2 c2,如果这次调整又产生了新的冲突,则按照同样的方式调整新的冲突。 复杂度 O ( n × m ) O(n \times m) O(n×m) 代码
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 2:57:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |