后缀数组学习笔记
后缀数组是什么 后缀数组就是主要处理字符串后缀问题的,它的实现算法主要有两种:倍增法和 DC3,复杂度分别是 \(O(n\log n)\) 和 \(O(n)\)。这里由于 DC3 代码答辩且难以理解,我就只写了倍增法的实现。 例题引入 P3809 【模板】后缀排序 题目大意 读入一个长度为 \(n\) 的由大小写英文字母或数字组成的字符串,把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序
C/C++编程 2023年12月20日 43
后缀数组是什么 后缀数组就是主要处理字符串后缀问题的,它的实现算法主要有两种:倍增法和 DC3,复杂度分别是 \(O(n\log n)\) 和 \(O(n)\)。这里由于 DC3 代码答辩且难以理解,我就只写了倍增法的实现。 例题引入 P3809 【模板】后缀排序 题目大意 读入一个长度为 \(n\) 的由大小写英文字母或数字组成的字符串,把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序
C/C++编程 2023年12月20日 43
这篇文章主要介绍了C++指针传递的作用是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++指针传递的作用是什么文章都会有所收获,下面我们一起来看看吧。 具体如下 void pointerTest(int num) { num = 20; } int main() { int num = 10; pointerTest(nu
C/C++编程 2023年12月19日 43
1. 算术运算符 算术运算符用于执行基本数学运算,例如加减乘除和取模等操作。下表列出了C++中支持的算术运算符: 运算符 描述 示例 + 加法 a+ ++b − 减法 a-b ∗ 乘法 a∗ *∗b / 除法 a/ //b 取模 ab 其中,a和b代表要进行计算的两个变量或值。 (1)加法运算符 加法运算符(+)用于将两个值相加。如果两个操作数都是数字,则它
C/C++编程 2023年12月17日 40
前缀树介绍 在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。常用与拼写检查自动补全等; 是一种查找结构他的存储逻辑类似于哈希表,但是它相对于哈希表来说,限制更多,通用性较差,但是它的功能更加强大,可定制性也更强。 leetcode指路:实现Trie(前缀树) 如图可以查看trie树的基本结构: 与二叉查找树不同,键不是直接保存在节点中
C/C++编程 2023年12月16日 42
C/C++编程 2023年12月12日 45
字符串中的BKDRHash哈希函数 在计算机科学中,哈希函数是一种将任意长度的输入(也称为“消息”)通过散列算法转换成固定长度的输出,该输出就是哈希值。哈希函数的一个重要特性是,对于相同的输入,无论何时执行哈希函数,它都应该产生相同的输出。然而,对于不同的输入,即使它们只有微小的差别,哈希函数也应该产生大不相同的输出。 BKDRHash是一种常用的字符串哈希函数,它是由布隆和卡恩于1977年提出的
C/C++编程 2023年12月10日 43
在做地图相关开发时候,绕不开不同坐标系间的转化,因此我根据查阅相关资料后将不同坐标系间的转换封装到一个GeoTranslate类中,该类转换函数不仅支持Qt/C++调用,同时可在QML中直接调用,配合上QML/Map很方便,我将该类做了个Demo,方便使用者使用,效果如图: 在QML的地图Map中使用高德的路径规划的效果: 使用方法为将 GeoTranslate类添加到工程中,调用转换
C/C++编程 2023年12月09日 51
今天小编给大家分享一下C++中的动态规划子序列问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。 一、子序列(不连续) 最长上升子序列 经典问题 int lengthOfLIS(int* nums, int numsSize){ //1.dp[i]表示遍历到nums
C/C++编程 2023年12月07日 39
本篇内容主要讲解“C语言协程如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言协程如何实现”吧! 协程是一种用户空间的非抢占式线程,主要用来解决等待大量的IO操作的问题。 协程vs线程 对比使用多线程来解决IO阻塞任务,使用协程的好处是不用加锁,访问共享的数据不用进行同步操作。这里需要说明的一点是,使用协程之所以不需要加锁不是因为所有的协程只
C/C++编程 2023年12月07日 38
WSASocket 无管道正向CMD,使用WSASocket函数创建一个TCP套接字,并绑定到一个本地地址和端口上。然后使用CreateProcess函数创建一个新的CMD进程,并将标准输入、输出和错误输出重定向到套接字的句柄上。这样,客户端可以通过网络连接到这个套接字,发送CMD命令并获取命令输出结果。这种方式称为无管道正向CMD,因为CMD进程的输入输出是通过套接字而非管道进行的。 WSASo
C/C++编程 2023年12月06日 33