- 博客(10)
- 资源 (1)
- 收藏
- 关注

原创 ACM算法基础-kmp算法详解
问题背景:kmp算法最直接的引用就是模式串和文本串的匹配,我们假设直接用暴力的方法进行匹配的话,方法很简单,就是两个指针,i指针最初指向文本串的起始位置,j指针最初指向模式串的起始位置,然后从文本串的起始位置开始每一位与模式串的每一位进行匹配,如果每一位都是相同的话,那么就继续匹配下一位,当我们只要匹配到有一位是不相等的时候,我们就将文本串的起始位置变成i1,然后继续从模式串的起始位置开始匹配,假设模式串和文本串的长度分别是n和m,时间复杂度是O(n*m),暴力确实太可怕了。
2021-10-03 16:20:23
10557
13
原创 中缀表达式转后缀表达式C++实现
中缀表达式转后缀表达式也是近年来找工作笔试、面试、考研机试,算法竞赛中的考点,所以学会它也是很有必要的,因为这种问题的代码比较模板化,建议读者直接背诵模板,但是不能死记硬背,而是在理解算法思路的基础上背诵此代码。
2024-01-30 22:58:02
2125
1
原创 表达式求值C++实现
表达式求值这个知识点在最近几年的找工作笔试、面试,考研机试,各种算法竞赛笔试中出现的频率越来越高了;但是以前从来没有见过这种题要想在笔试面试中写出来不是一件简单的事情,网络上面大部分代码不够精炼,不方便理解和背诵模板;本篇博客提供了表达式求值的一道经典模板题,从理解表达式求值思路到整个代码模板,方便大家理解和背诵;旨在帮助广大笔试面试的朋友轻松应对此类问题。
2024-01-28 21:10:31
4488
原创 ACM算法基础-并查集详解
并查集并查集的作用:1:将两个集合合并成一个集合2:询问两个元素是否在同一个集合中存储的方式:我们用树的形式来维护所有的集合,每个集合用一颗树来表示树中根节点的编号就是该集合的编号用一个fa[]fa[]fa[]数组来存储每一个点的父亲结点问题:如何判断树根?x=fa[x]x=fa[x]x=fa[x];如何判断每一个点所在的集合编号 while(x!=fa[x])x=fa[x]while(x!=fa[x]) x=fa[x]while(x!=fa[x])x=fa[x];如何合并两个集合?将
2021-10-05 14:42:00
1002
1
原创 ACM算法基础-离散化算法详解
离散化算法离散化使用的范围首先给你一个序列,我们有一些数值,这些数值的范围比较大,值域可能是[0,109][0,10^9][0,109],但是里面的个数是很少的,个数可能是[0,105][0,10^5][0,105],有些时候我们需要利用这些值当作数组的下标来做,这是我们是不可能去开一个10910^9109的数组的,因此,我们就要将这个序列里面的数映射到一个从0开始的连续自然数。但是在离散化的时候我们应该注意哪一些问题呢?(1)序列里面的元素有可能是重复\color{red}{重复}重复的
2021-09-28 11:21:49
5131
4
原创 Educational Codeforces Round 113 (Rated for Div. 2) 题解
[Educational Codeforces Round 113 (Rated for Div. 2)]题解A Balanced Substring题目大意:给你一个长度为n只含有a,b的字符串,字符串的长度从1-n,现在你需要找到一个平衡的字串(这个字串中a的个数是等于b的个数),如果这样的字串存在的话输出字串起点和终点的下标,没有的话输出-1 -1;解题思路:利用两层循环,外层循环代表寻找字串的起点的下标,内层循环表示终点的下标,如果找到了的话就将下标记录退出循环并输出,否则输出-1 -1。
2021-09-09 23:35:48
199
原创 用命令行的方式才运行c/c++程序(精准的测量程序运行的时间)
用命令行的方式才运行c/c++程序下面演示的是vs2019如何运行比如我运行的程序文件全部放在e盘1 e: 按enter2 cd (找到那个带.exe所在的目录,复制粘贴到上面)3 echo (输入程序的东西) | 文件名.exe这里的echo 51200 | Project1.exe 的含义是操作系统会自动将51200输入,这个在测试时间的时候就会非常的精准,如果不用这个的话,那么在计算时间的时候键盘输入的时间也会被计算在内,Project1.exe是程序名。cd 表示转换目录 c
2021-09-08 12:00:12
364
原创 Codeforces Round #734 (Div. 3)题解
B2. Wonderful Coloring - 2题目的基本意思:1:每个元素要么不涂,要么只能涂一种颜色;2:每一种颜色涂的元素两两都是不相同的;3:每一种颜色涂的元素的个数时相同的;4:最后序列中涂的元素的个数要最大;解题的思路:1:去掉没必要涂的元素(1)该元素在序列中的个数要大于k(k表示颜色的总数),将超过k的那部分直接用0表示即可,不用涂;(2)为了保证每一种颜色涂的元素的个数时相同的,所以最后涂的元素的总个数一定是k的整数倍...
2021-07-24 12:25:29
261
原创 用数组的方式来模拟链表
链表有两个重要的东西,一个是数据域,另一个是指针域。但是我们用结构体加指针的方式我们每次都要动态申请空间,而C++中的new函数实现非常的耗时,所以我们当有许多组数据的时候,我们通常采用数组模拟的方式来存储链表。 数组中的下标表示的是结点,e[N]表示的是当前结点里面存储的值,即数据域,ne[N]表示的是当前结点指向下一个节点的位置,即指针域。我们要实现还需要一个int类型的变量head,head表示头节点的下标,idx是一个指针,idx表示当前已经用到了哪个点(当我们在声明...
2021-07-10 23:33:20
245
3
JavaScript实现房屋平面图构建三维房屋空间
2022-10-14
C#基于asp.net的图书销售系统
2022-06-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人