| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Educational Codeforces Round 127 (Rated for Div. 2) A~E 题解 -> 正文阅读 |
|
[数据结构与算法]Educational Codeforces Round 127 (Rated for Div. 2) A~E 题解 |
A. String Building题意:问是否可以用 a a 、 a a a 、 b b 、 b b b aa、aaa、bb、bbb aa、aaa、bb、bbb 拼成所给字符串。 思路:将原字符串分成连续的 a 、 b a、b a、b 构成的子串,看是否有长度为 1 1 1 的即可。 时间复杂度: O ( n ) O(n) O(n)
B. Consecutive Points Segment题意:给出一连串严格递增的正整数点,每个点都可以选择向左或右移动一格,又或是保持原位置。 思路:一道思维题,亦或是分类讨论。
时间复杂度: O ( n ) O(n) O(n)
C. Dolce Vita题意:有 n n n 家商店,每家商店每天都会卖一包糖,但是所有的商店每天价格都会比昨天 + 1 +1 +1 ;而你每天都会有数量为 m m m 的金钱。,问最终最多能够买多少包糖。 思路:一道明显的贪心。因为所有商店的涨价速度相同,我们每天肯定要把最便宜的商店尽可能买爆,那么思路就是遍历 n n n 家商店,求出每家商店在每天都将比它便宜的商店买完并且有余钱的情况下,最多能够买多少天。 但是,直接算的时间复杂度是
O
(
n
2
)
O(n^{2})
O(n2) ,毫无疑问会
T
T
T,我们需要在遍历到第
i
i
i 家商店时,可以将所有比它便宜的商店带来的影响消除。 时间复杂度: O ( n ) O(n) O(n)
D. Insert a Progression题意:有一个长度为 n n n 的正整数序列与 1 … … m 1……m 1……m 这 m m m 个数,你需要将这 m m m 个数插入到原序列中,使其 ∑ i = 1 n + m ? 1 a b s ( s [ i + 1 ] ? s [ i ] ) \sum_{i=1}^{n+m-1}{abs(s[i+1]-s[i])} ∑i=1n+m?1?abs(s[i+1]?s[i]) 的值最小。 思路:这道题好无聊的,如果是算相邻数的方差会好玩很多()。 首先我们先把原序列的相邻两数的差值绝对值之和求出来,因为它是肯定存在的; 那么现在剩下的,就只有:假设原序列中的所有数都在
[
l
,
r
]
[l,r]
[l,r] 的范围中,如果
l
>
1
l>1
l>1 ,那么
1
…
…
l
?
1
1……l-1
1……l?1 还没有插入;如果
r
<
m
r<m
r<m ,那么
r
+
1
…
…
m
r+1……m
r+1……m 还没有插入。
我们只需要分别计算出两种方式所造成的代价,并取两者中代价较小的即可。 时间复杂度: O ( n ) O(n) O(n)
E. Preorder题意:给你一个根节点下标为
1
1
1 的满二叉树,每个节点上都有
A
、
B
A、B
A、B 中的一个字符,设为
a
[
i
]
a[i]
a[i],每个非叶子节点
u
u
u 的权值
s
[
u
]
s[u]
s[u] 可以表示为
s
[
u
]
=
a
[
u
]
+
s
[
u
?
2
]
+
s
[
u
?
2
+
1
]
s[u]=a[u]+s[u*2]+s[u*2+1]
s[u]=a[u]+s[u?2]+s[u?2+1] 。 思路:一个结论很……怪的题。 那么当我们遍历到第 u u u 层,它的左右两颗子树分别可以造成 l , r l,r l,r 的变化次数(姑且这么说),当我们想要交换它的左右子树,就不得不考虑到它的两个子树是否完全相同这个问题。
那么这就意味着,如果节点 u u u 的左右子树不同,那么交换当前节点的左右子树,可以对根节点的权值造成 2 ? l ? r 2*l*r 2?l?r 种变化;而节点 u u u 的左右子树相同时,我交换左右子树,不会造成任何变化,因为左子树的状态,右子树同样可以达到,因此节点 u u u 为根节点的子树只能够造成 l ? r l*r l?r 种变化。 这样,我们的问题就只剩下一种:如何判断两个满二叉树是完全相同的? 时间复杂度: O ( n ) O(n) O(n)
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 7:49:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |