当前位置: 首页 > news >正文

算法竞赛ICPC、CCPC、NIO、蓝桥杯、天梯赛

算法竞赛

  • 前言
  • 一、为什么学习算法竞赛
  • 二、学习算法的阶段
  • 三、算法竞赛具体学习内容
  • 1、基础数据结构
    • 1.1、链表
      • 1.1.1、动态链表
      • 1.1.2、静态链表
      • 1.1.3、STL list
    • 1.2、队列
      • 1.2.1、STL queue
      • 1.2.2、手写循环队列
      • 1.2.3、双端队列和单调队列
      • 1.2.4、优先队列
    • 1.3、栈
      • 1.3.1、STL stack
      • 1.3.2、手写栈
      • 1.3.3、单调栈
    • 1.4、二叉树和哈夫曼树
      • 1.4.1、二叉树的概念
      • 1.4.2、二叉树的遍历
      • 1.4.3、哈夫曼树和哈夫曼编码
    • 1.5、堆
      • 1.5.1、二叉堆的概念
      • 1.5.2、二叉堆的操作
      • 1.5.3、二叉堆的手写代码
      • 1.5.4、堆和priority_queue
  • 2、基本算法
    • 2.1、算法复杂度
      • 2.1.1、算法的概念
      • 2.1.2、复杂度和大O记号
    • 2.2、尺取法
      • 2.2.1、尺取法的概念
      • 2.2.2、反向扫描
      • 2.2.3、同向扫描
    • 2.3、二分法
      • 2.3.1、二分法的理论背景
      • 2.3.2、整数二分
      • 2.3.3、实数二分
    • 2.4、三分法
      • 2.4.1、原理
      • 2.4.2、实数三分
      • 2.4.3、整数三分
    • 2.5、倍增法与ST算法
      • 2.5.1、倍增法
      • 2.5.2、ST算法
    • 2.6、前缀和与差分
      • 2.6.1、一维差分
      • 2.6.2、二维差分
      • 2.6.3、三维差分
    • 2.7、离散化
      • 2.7.1、离散化的概念
      • 2.7.2、离散化手工编码
      • 2.7.3、用STL函数实现离散化
      • 2.7.4、离散化的应用
    • 2.8、排序和排列
      • 2.8.1、排序函数
      • 2.8.2、排列
    • 2.9、分治法
      • 2.9.1、汉诺塔和快速幂
      • 2.9.2、归并排序
      • 2.9.3、快速排序
    • 2.10、贪心法与拟阵
      • 2.10.1、贪心法
      • 2.10.2、拟阵
  • 3、搜索
    • 3.1、BFS和DFS基础
      • 3.1.1、搜索简介
      • 3.1.2、搜索算法的基本思路
      • 3.1.3、BFS的代码实现
      • 3.1.4、DFS的常见操作和代码框架
      • 3.1.5、BFS和DFS的对比
      • 3.1.6、连通性判断
    • 3.2、剪枝
      • 3.2.1、BFS判重
      • 3.2.2、剪枝的应用
    • 3.3、洪水填充
    • 3.4、BFS与最短路径
    • 3.5、双向广搜
      • 3.5.1、双向广播的原理和复杂度分析
      • 3.5.2、双向广搜的两种实现
      • 3.5.3、双向广搜例题
    • 3.6、BFS与优先队列
    • 3.7、BFS与双端队列
    • 3.8、A*算法
      • 3.8.1、贪心最优搜索和Dijkstra算法
      • 3.8.2、A*算法的原理和复杂度
      • 3.8.3、3种算法的对比
      • 3.8.4、h函数的设计
      • 3.8.5、A*算法例题
    • 3.9、IDDFS和IDA*
      • 3.9.1、IDDFS
      • 3.9.2、IDA*
  • 4、高级数据结构
    • 4.1、并查集
      • 4.1.1、并查集的基本操作
      • 4.1.2、合并的优化
      • 4.1.3、查询的优化(路径压缩)
      • 4.1.4、带权并查集
    • 4.2、树状数组
      • 4.2.1、树状数组的概念和基本编码
      • 4.2.2、树状数组的基本应用
      • 4.2.3、树状数组的扩展应用
    • 4.3、线段树
      • 4.3.1、线段树的概念
      • 4.3.2、区间查询
      • 4.3.3、区间操作与Lazy-Tag
      • 4.3.4、线段树的基础应用
      • 4.3.5、区间最值和区间历史最值
      • 4.3.6、区间合并
      • 4.3.7、扫描线
      • 4.3.8、二维线段树(树套树)
    • 4.4、可持久化线段树
      • 4.4.1、可持久化线段树的思想
      • 4.4.2、区间第k大/小问题
      • 4.4.3、其他经典问题
    • 4.5、分块与莫队算法
      • 4.5.1、分块
      • 4.5.2、基础莫队算法
      • 4.5.3、待修改的莫队算法
      • 4.5.4、树上莫队
    • 4.6、块状链表
    • 4.7、简单树上问题
      • 4.7.1、树的重心
      • 4.7.2、树的直径
    • 4.8、LCA
      • 4.8.1、倍增法求LCA
      • 4.8.2、Tarjan算法求LCA
      • 4.8.3、LCA应用
    • 4.9、树上的分治
      • 4.9.1、静态点分治
      • 4.9.2、动态分治
    • 4.10、树链部分
      • 4.10.1、树链剖分的概念
      • 4.10.2、树链剖分的典型应用
    • 4.11、二叉查找树
    • 4.12、替罪羊树
      • 4.12.1、不平衡率
      • 4.12.2、替罪羊树的操作
      • 4.12.3、例题
    • 4.13、Treap树
      • 4.13.1、Treap树的性质
      • 4.13.2、基于旋转法的Treap树操作
    • 4.14、FHQ Treap树
      • 4.14.1、FHQ的基本操作
      • 4.14.2、FHQ Treap树的基本应用
    • 4.15、笛卡尔树
      • 4.15.1、笛卡尔树的概念
      • 4.15.2、用单调栈建笛卡尔树
      • 4.15.3、笛卡尔树和RMQ问题
    • 4.16、Splay树
      • 4.16.1、Splay旋转
      • 4.16.2、Splay树的平摊分析
      • 4.16.3、Splay树的常用操作
    • 4.17、K-D树
      • 4.17.1、从空间到二叉树的转换
      • 4.17.2、K-D树的概念和基本操作
      • 4.17.3、寻找最近点
      • 4.17.4、区间查询
    • 4.18、动态树与LCT
      • 4.18.1、LCT的思想
      • 4.18.2、从原树到辅助树
      • 4.18.3、LCT的存储和性质
      • 4.18.4、LCT的操作
      • 4.18.5、LCT的基本应用
  • 5、动态规划
    • 5.1、DP概念和编程方法
      • 5.1.1、DP的概念
      • 5.1.2、DP的两种编程方式
      • 5.1.3、DP的设计和实现
    • 5.2、经典线性DP问题
    • 5.3、数位统计DP
      • 5.3.1、数位统计DP的递推实现
      • 5.3.2、数位统计DP的记忆化搜索实现
      • 5.3.3、数位统计DP的例题
    • 5.4、状态压缩DP
      • 5.4.1、引子
      • 5.4.2、状态压缩DP的原理
      • 5.4.3、状态压缩DP的例题
      • 5.4.4、三进制状态压缩DP
    • 5.5、区间DP
      • 5.5.1、石子合并问题和两种模板代码
      • 5.5.2、区间DP例题
      • 5.5.3、二维区间DP
    • 5.6、树形DP
      • 5.6.1、树形DP的基本操作
      • 5.6.2、背包与树形DP
    • 5.7、一般优化
    • 5.8、单调队列优化
      • 5.8.1、单调队列优化的原理
      • 5.8.2、单调队列优化例题
    • 5.9、斜率优化/凸壳优化
      • 5.9.1、把状态转移方程变换为平面的斜率问题
      • 5.9.2、求一个dp[i]
      • 5.9.3、求所有dp[i]
      • 5.9.4、例题
    • 5.10、四边形不等式优化
      • 5.10.1、应用场合
      • 5.10.2、四边形不等式优化操作
      • 5.10.3、四边形不等式定义和单调性定义
      • 5.10.4、四边形不等式定理
      • 5.10.5、例题
  • 6、数论和线性代数
    • 6.1、模运算
    • 6.2、快速幂
    • 6.3、矩阵的应用
      • 6.3.1、矩阵的计算
      • 6.3.2、矩阵快速幂
      • 6.3.3、矩阵快速幂加速递推
      • 6.3.4、矩阵乘法与路径问题
    • 6.4、高斯消元
      • 6.4.1、高斯消元的基本操作
      • 6.4.2、高斯约当消元法
      • 6.4.3、例题
    • 6.5、异或空间线性基
      • 6.5.1、线性基的构造
      • 6.5.2、线性基的应用
    • 6.6、0/1分数规则
      • 6.6.1、二分法与0/1分数规则
      • 6.6.2、应用场景
    • 6.7、GCD和LCM
      • 6.7.1、GCD
      • 6.7.2、LCM
      • 6.7.3、裴蜀定理
    • 6.8、线性丢番图方程
      • 6.8.1、二元线性丢番图方程
      • 6.8.2、扩展欧几里得算法与二元线性丢番方程的解
      • 6.8.3、多元线性方程丢番图方程
    • 6.9、同余
      • 6.9.1、同余概述
      • 6.9.2、一元线性同余方程
      • 6.9.3、逆
      • 6.9.4、同余方程组
    • 6.10、素数(质素)
      • 6.10.1、小素数的判定
      • 6.10.2、大素数的判定
      • 6.10.3、素数筛
      • 6.10.4、质因数分解
    • 6.11、威尔逊定理
    • 6.12、积极函数
    • 6.13、欧拉函数
      • 6.13.1、欧拉函数的定理和性质
      • 6.13.2、求欧拉函数的通解公式
      • 6.13.3、用线性筛(欧拉筛)求1~n内所有的欧拉函数
    • 6.14、整除分块(数论分块)
    • 6.15、迪利克雷卷积
    • 6.16、莫比乌斯函数和莫比乌斯反演
    • 6.17、杜教筛
      • 6.17.1、杜教筛的起源
      • 6.17.2、杜教筛公式的推导
      • 6.17.2、杜教筛算法和复杂度
      • 6.17.3、杜教筛模板代码
  • 7、组合数学
    • 7.1、基本概念
    • 7.2、鸽巢原理
    • 7.3、二项式定理和杨辉三角
    • 7.4、卢卡斯定理
    • 7.5、容斥原理
    • 7.6、Catalan数和Stirling数
      • 7.6.1、Catalan数
      • 7.6.2、Stirling数
    • 7.7、Burnside定理和polya计数
      • 7.7.1、置换群
      • 7.7.2、Burnside定理
      • 7.7.3、polya计数
    • 7.8、母函数
      • 7.8.1、普通型母函数
      • 7.8.2、指数型母函数
      • 7.8.3、母函数与泰勒级数
    • 7.9、公平组合游戏(博弈论)
      • 7.9.1、巴什游戏与P-position
      • 7.9.2、尼姆游戏
      • 7.9.3、图游戏与Sprague-Grundy函数
      • 7.9.4、威佐夫游戏
  • 8、计算几何
    • 8.1、二维几何
      • 8.1.1、点和向量
      • 8.1.2、点积和叉积
      • 8.1.3、点和线
      • 8.1.4、多边形
      • 8.1.5、凸包
      • 8.1.6、最近点对
      • 8.1.7、旋转卡壳
      • 8.1.8、半平面交
    • 8.2、圆
      • 8.2.1、基本计算
      • 8.1.2、最小圆覆盖
    • 8.3、三维几何
      • 8.3.1、三维点和线
      • 8.3.2、三维点积
      • 8.3.3、三维叉积
      • 8.3.4、最小球覆盖
      • 8.3.5、三维凸包
      • 8.3.6、三维几何例题
  • 9、字符串
    • 9.1、进制哈希
      • 9.1.1、哈希函数BKDRHash
      • 9.1.2、进制哈希的应用
    • 9.2、Manacher
      • 9.2.1、暴力法求最长回文子串
      • 9.2.2、Manacher算法
      • 9.2.3、模板代码
    • 9.3、字典树
      • 9.3.1、字典树的构造
      • 9.3.2、模板代码
    • 9.4、回文树
      • 9.4.1、回文数的关键技术
      • 9.4.2、模板代码
    • 9.5、KMP
      • 9.5.1、朴素的模式匹配算法
      • 9.5.2、KMP算法
      • 9.5.3、模板代码和例题
      • 9.5.4、扩展KMP
    • 9.6、AC自动机
      • 9.6.1、AC自动机算法
      • 9.6.2、模板代码
    • 9.7、后缀树和后缀树组
      • 9.7.1、后缀树和后缀树组的概念
      • 9.7.2、倍增法求
      • 9.7.3、后缀树的经典应用
    • 9.8、后缀自动机
      • 9.8.1、后缀自动机的概念
      • 9.8.2、endpos和等价类
      • 9.8.3、后缀自动机的构造
      • 9.8.4、模板代码
      • 9.8.5、后缀自动机的应用
  • 10、图论
    • 10.1、图的储存
      • 10.1.1、邻接矩阵
      • 10.1.2、邻接表
      • 10.1.3、链式前向星
    • 10.2、拓扑结构
      • 10.2.1拓扑排序的概念
      • 10.2.2基于BFS的拓扑排序
      • 10.2.3基于DFS的拓扑排序
      • 10.2.4、输出拓扑排序
    • 10.3欧拉路
      • 10.3.1、欧拉路和欧拉回路的存在性判断
      • 10.3.2、输出一个欧拉回路
    • 10.4、无向图的连通性
      • 10.4.1、割点和割边
      • 10.4.2双连通分量
    • 10.5、有向图的连通性
      • 10.5.1、Kosaraju算法
      • 10.5.2、Tarjan算法
    • 10.6、基环树
    • 10.7、2-SAT
    • 10.8、最短路径
      • 10.8.1、Floyd算法
      • 10.8.2、传递闭包
      • 10.8.3、Dijkstra算法
      • 10.8.4、Bellman-Ford算法
      • 10.8.5、SPFA算法
      • 10.8.6、比较Bellman-Ford算法和Dijkstra算法
      • 10.8.7、负环和差分约束系统
    • 10.9、最小生成树
      • 10.9.1、Kruskal算法
      • 10.9.2、Prim算法
      • 10.9.3、扩展问题
    • 10.10、最大流
      • 10.10.1、Ford-Fullkerson方法
      • 10.10.2、Edmonds-Karp算法
      • 10.10.3、Dinic算法
      • 10.10.4、SAP算法
      • 10.10.5、混合圆的欧拉回路
    • 10.11、二分圆
    • 10.12、最小割
    • 10.13、费用流

前言

🎁🎁🎁本文章将进行超链接,建议大家收藏,在接下来的一年时间,本文章基本可以完成更新,请大家耐心等待~~

⭐️本博客深入解析与算法竞赛相关的数据结构、算法、代码。包括基础数据结构、基本算法、搜索、高级数据结构、动态规划、数论和线性代数、组合数学、计算机几何、字符串和图论。

⭐️适用人群:参加算法竞赛的中学生大学生、准备面试IT企业算法题的求职者、需要提高算法能力的开发人员,以及对计算机算法有兴趣的广大科技工作者。

大家对算法有任何疑问都可以在评论区提出来哦!博主会尽最大可能回答哦!因为博主对机器学习、深度学习、AIOT比较感兴趣,所以平时会观看一些算法和数据结构方面的书籍,以下内容是通过罗勇军老师的书籍所写。无论你学习算法的起点在哪里,只要你肯努力,持之以恒,不断探索和实践,你一定会取得进步。每次遇到困难,不要放弃,而是要勇敢地面对它,坚信自己能够克服它。相信自己,相信自己的能力! 希望大家通过接下来的学习,在算法方面更上一层楼。

以下为学习算法竞赛的思维导图,可能会看不清,请联系博主取图

在这里插入图片描述

一、为什么学习算法竞赛

目前国内影响比较大的计算机算法竞赛有全国青少年信息学奥林匹克竞赛(NOI)、国际大学生程序设计竞赛(ICPC)、中国大学生程序设计大赛(CCPC)、蓝桥杯全国软件和信息技术专业人才大赛(软件类)、中国高校计算机大赛-团体程序设计天梯赛等。

学习和参加算法竞赛是通往杰出程序员的捷径。算法竞赛在提高代码量、掌握丰富的算法知识、培养计算思维和逻辑思维、培养团队合作精神等多个方面都有很大的帮助。

二、学习算法的阶段

⭐️初学者
一名刚学过C/C++、Java、Python中任意一门编程语言的学生,做了一些编程题目,建立了编码兴趣,对进一步学习有信心和动力。
⭐️中级者
精通编程语言,编码得心应手,做过几百道基础算法题,并且准备继续对算法竞赛倾心投入,可能遇到学习瓶颈,计算思维还不够。
⭐️高级者
获得过蓝桥杯、ICPC、CCPC、NIO的奖牌。

以下内容按难度进行了划分

阶段内容初级中级高级
阶段一基础数据结构掌握链表、队列、栈,树掌握堆
阶段二基本算法掌握二分法、排序与排列掌握倍增法、分治法、贪心法
阶段三搜索掌握BFS和DFS、洪水填充掌握双向广搜、IDDFS和IDA*掌握BFS与双端队列、A*算法
阶段四高级数据结构掌握并查集、二叉查找树掌握树状数组、线段树、LCA、笛卡尔树集掌握可持久化线段树、动态树与LCT
阶段五动态规划掌握DP概念和编程方法、经典线性DP问题掌握数位统计DP、区间DP、树形DP掌握一般优化、单调队列优化、四边形不等式优化
阶段六数论和线性代数掌握模运算、高斯消元、素数掌握矩阵的应用、0/1分数规则、威尔逊定理掌握积性函数、欧拉函数、杜教筛
阶段七组合数学掌握鸽巢原理、二项式定理和杨辉三角掌握卢卡斯定理、容斥原理掌握母函数、公平组合游戏(博弈论)
阶段八计算几何掌握二维几何、圆掌握三维几何
阶段九字符串掌握进制哈希、Manacher掌握字典树、回文树、KMP掌握AC自动机、后缀自动机
阶段十图论掌握图的储存、拓扑排序掌握无向图的连通性、有向图的连通性、最短路径掌握最大流、二分图

⭐️⭐️⭐️下面部分将进行超链接,未进行超链接的部分表示还没有更新

三、算法竞赛具体学习内容

1、基础数据结构

1.1、链表

1.1.1、动态链表

1.1.2、静态链表

1.1.3、STL list

1.2、队列

1.2.1、STL queue

1.2.2、手写循环队列

1.2.3、双端队列和单调队列

1.2.4、优先队列

1.3、栈

1.3.1、STL stack

1.3.2、手写栈

1.3.3、单调栈

1.4、二叉树和哈夫曼树

1.4.1、二叉树的概念

1.4.2、二叉树的遍历

1.4.3、哈夫曼树和哈夫曼编码

1.5、堆

1.5.1、二叉堆的概念

1.5.2、二叉堆的操作

1.5.3、二叉堆的手写代码

1.5.4、堆和priority_queue

2、基本算法

2.1、算法复杂度

2.1.1、算法的概念

2.1.2、复杂度和大O记号

2.2、尺取法

2.2.1、尺取法的概念

2.2.2、反向扫描

2.2.3、同向扫描

2.3、二分法

2.3.1、二分法的理论背景

2.3.2、整数二分

2.3.3、实数二分

2.4、三分法

2.4.1、原理

2.4.2、实数三分

2.4.3、整数三分

2.5、倍增法与ST算法

2.5.1、倍增法

2.5.2、ST算法

2.6、前缀和与差分

2.6.1、一维差分

2.6.2、二维差分

2.6.3、三维差分

2.7、离散化

2.7.1、离散化的概念

2.7.2、离散化手工编码

2.7.3、用STL函数实现离散化

2.7.4、离散化的应用

2.8、排序和排列

2.8.1、排序函数

2.8.2、排列

2.9、分治法

2.9.1、汉诺塔和快速幂

2.9.2、归并排序

2.9.3、快速排序

2.10、贪心法与拟阵

2.10.1、贪心法

2.10.2、拟阵

3、搜索

3.1、BFS和DFS基础

3.1.1、搜索简介

3.1.2、搜索算法的基本思路

3.1.3、BFS的代码实现

3.1.4、DFS的常见操作和代码框架

3.1.5、BFS和DFS的对比

3.1.6、连通性判断

3.2、剪枝

3.2.1、BFS判重

3.2.2、剪枝的应用

3.3、洪水填充

3.4、BFS与最短路径

3.5、双向广搜

3.5.1、双向广播的原理和复杂度分析

3.5.2、双向广搜的两种实现

3.5.3、双向广搜例题

3.6、BFS与优先队列

3.7、BFS与双端队列

3.8、A*算法

3.8.1、贪心最优搜索和Dijkstra算法

3.8.2、A*算法的原理和复杂度

3.8.3、3种算法的对比

3.8.4、h函数的设计

3.8.5、A*算法例题

3.9、IDDFS和IDA*

3.9.1、IDDFS

3.9.2、IDA*

4、高级数据结构

4.1、并查集

4.1.1、并查集的基本操作

4.1.2、合并的优化

4.1.3、查询的优化(路径压缩)

4.1.4、带权并查集

4.2、树状数组

4.2.1、树状数组的概念和基本编码

4.2.2、树状数组的基本应用

4.2.3、树状数组的扩展应用

4.3、线段树

4.3.1、线段树的概念

4.3.2、区间查询

4.3.3、区间操作与Lazy-Tag

4.3.4、线段树的基础应用

4.3.5、区间最值和区间历史最值

4.3.6、区间合并

4.3.7、扫描线

4.3.8、二维线段树(树套树)

4.4、可持久化线段树

4.4.1、可持久化线段树的思想

4.4.2、区间第k大/小问题

4.4.3、其他经典问题

4.5、分块与莫队算法

4.5.1、分块

4.5.2、基础莫队算法

4.5.3、待修改的莫队算法

4.5.4、树上莫队

4.6、块状链表

4.7、简单树上问题

4.7.1、树的重心

4.7.2、树的直径

4.8、LCA

4.8.1、倍增法求LCA

4.8.2、Tarjan算法求LCA

4.8.3、LCA应用

4.9、树上的分治

4.9.1、静态点分治

4.9.2、动态分治

4.10、树链部分

4.10.1、树链剖分的概念

4.10.2、树链剖分的典型应用

4.11、二叉查找树

4.12、替罪羊树

4.12.1、不平衡率

4.12.2、替罪羊树的操作

4.12.3、例题

4.13、Treap树

4.13.1、Treap树的性质

4.13.2、基于旋转法的Treap树操作

4.14、FHQ Treap树

4.14.1、FHQ的基本操作

4.14.2、FHQ Treap树的基本应用

4.15、笛卡尔树

4.15.1、笛卡尔树的概念

4.15.2、用单调栈建笛卡尔树

4.15.3、笛卡尔树和RMQ问题

4.16、Splay树

4.16.1、Splay旋转

4.16.2、Splay树的平摊分析

4.16.3、Splay树的常用操作

4.17、K-D树

4.17.1、从空间到二叉树的转换

4.17.2、K-D树的概念和基本操作

4.17.3、寻找最近点

4.17.4、区间查询

4.18、动态树与LCT

4.18.1、LCT的思想

4.18.2、从原树到辅助树

4.18.3、LCT的存储和性质

4.18.4、LCT的操作

4.18.5、LCT的基本应用

5、动态规划

5.1、DP概念和编程方法

5.1.1、DP的概念

5.1.2、DP的两种编程方式

5.1.3、DP的设计和实现

5.2、经典线性DP问题

5.3、数位统计DP

5.3.1、数位统计DP的递推实现

5.3.2、数位统计DP的记忆化搜索实现

5.3.3、数位统计DP的例题

5.4、状态压缩DP

5.4.1、引子

5.4.2、状态压缩DP的原理

5.4.3、状态压缩DP的例题

5.4.4、三进制状态压缩DP

5.5、区间DP

5.5.1、石子合并问题和两种模板代码

5.5.2、区间DP例题

5.5.3、二维区间DP

5.6、树形DP

5.6.1、树形DP的基本操作

5.6.2、背包与树形DP

5.7、一般优化

5.8、单调队列优化

5.8.1、单调队列优化的原理

5.8.2、单调队列优化例题

5.9、斜率优化/凸壳优化

5.9.1、把状态转移方程变换为平面的斜率问题

5.9.2、求一个dp[i]

5.9.3、求所有dp[i]

5.9.4、例题

5.10、四边形不等式优化

5.10.1、应用场合

5.10.2、四边形不等式优化操作

5.10.3、四边形不等式定义和单调性定义

5.10.4、四边形不等式定理

5.10.5、例题

6、数论和线性代数

6.1、模运算

6.2、快速幂

6.3、矩阵的应用

6.3.1、矩阵的计算

6.3.2、矩阵快速幂

6.3.3、矩阵快速幂加速递推

6.3.4、矩阵乘法与路径问题

6.4、高斯消元

6.4.1、高斯消元的基本操作

6.4.2、高斯约当消元法

6.4.3、例题

6.5、异或空间线性基

6.5.1、线性基的构造

6.5.2、线性基的应用

6.6、0/1分数规则

6.6.1、二分法与0/1分数规则

6.6.2、应用场景

6.7、GCD和LCM

6.7.1、GCD

6.7.2、LCM

6.7.3、裴蜀定理

6.8、线性丢番图方程

6.8.1、二元线性丢番图方程

6.8.2、扩展欧几里得算法与二元线性丢番方程的解

6.8.3、多元线性方程丢番图方程

6.9、同余

6.9.1、同余概述

6.9.2、一元线性同余方程

6.9.3、逆

6.9.4、同余方程组

6.10、素数(质素)

6.10.1、小素数的判定

6.10.2、大素数的判定

6.10.3、素数筛

6.10.4、质因数分解

6.11、威尔逊定理

6.12、积极函数

6.13、欧拉函数

6.13.1、欧拉函数的定理和性质

6.13.2、求欧拉函数的通解公式

6.13.3、用线性筛(欧拉筛)求1~n内所有的欧拉函数

6.14、整除分块(数论分块)

6.15、迪利克雷卷积

6.16、莫比乌斯函数和莫比乌斯反演

6.17、杜教筛

6.17.1、杜教筛的起源

6.17.2、杜教筛公式的推导

6.17.2、杜教筛算法和复杂度

6.17.3、杜教筛模板代码

7、组合数学

7.1、基本概念

7.2、鸽巢原理

7.3、二项式定理和杨辉三角

7.4、卢卡斯定理

7.5、容斥原理

7.6、Catalan数和Stirling数

7.6.1、Catalan数

7.6.2、Stirling数

7.7、Burnside定理和polya计数

7.7.1、置换群

7.7.2、Burnside定理

7.7.3、polya计数

7.8、母函数

7.8.1、普通型母函数

7.8.2、指数型母函数

7.8.3、母函数与泰勒级数

7.9、公平组合游戏(博弈论)

7.9.1、巴什游戏与P-position

7.9.2、尼姆游戏

7.9.3、图游戏与Sprague-Grundy函数

7.9.4、威佐夫游戏

8、计算几何

8.1、二维几何

8.1.1、点和向量

8.1.2、点积和叉积

8.1.3、点和线

8.1.4、多边形

8.1.5、凸包

8.1.6、最近点对

8.1.7、旋转卡壳

8.1.8、半平面交

8.2、圆

8.2.1、基本计算

8.1.2、最小圆覆盖

8.3、三维几何

8.3.1、三维点和线

8.3.2、三维点积

8.3.3、三维叉积

8.3.4、最小球覆盖

8.3.5、三维凸包

8.3.6、三维几何例题

9、字符串

9.1、进制哈希

9.1.1、哈希函数BKDRHash

9.1.2、进制哈希的应用

9.2、Manacher

9.2.1、暴力法求最长回文子串

9.2.2、Manacher算法

9.2.3、模板代码

9.3、字典树

9.3.1、字典树的构造

9.3.2、模板代码

9.4、回文树

9.4.1、回文数的关键技术

9.4.2、模板代码

9.5、KMP

9.5.1、朴素的模式匹配算法

9.5.2、KMP算法

9.5.3、模板代码和例题

9.5.4、扩展KMP

9.6、AC自动机

9.6.1、AC自动机算法

9.6.2、模板代码

9.7、后缀树和后缀树组

9.7.1、后缀树和后缀树组的概念

9.7.2、倍增法求

9.7.3、后缀树的经典应用

9.8、后缀自动机

9.8.1、后缀自动机的概念

9.8.2、endpos和等价类

9.8.3、后缀自动机的构造

9.8.4、模板代码

9.8.5、后缀自动机的应用

10、图论

10.1、图的储存

10.1.1、邻接矩阵

10.1.2、邻接表

10.1.3、链式前向星

10.2、拓扑结构

10.2.1拓扑排序的概念

10.2.2基于BFS的拓扑排序

10.2.3基于DFS的拓扑排序

10.2.4、输出拓扑排序

10.3欧拉路

10.3.1、欧拉路和欧拉回路的存在性判断

10.3.2、输出一个欧拉回路

10.4、无向图的连通性

10.4.1、割点和割边

10.4.2双连通分量

10.5、有向图的连通性

10.5.1、Kosaraju算法

10.5.2、Tarjan算法

10.6、基环树

10.7、2-SAT

10.8、最短路径

10.8.1、Floyd算法

10.8.2、传递闭包

10.8.3、Dijkstra算法

10.8.4、Bellman-Ford算法

10.8.5、SPFA算法

10.8.6、比较Bellman-Ford算法和Dijkstra算法

10.8.7、负环和差分约束系统

10.9、最小生成树

10.9.1、Kruskal算法

10.9.2、Prim算法

10.9.3、扩展问题

10.10、最大流

10.10.1、Ford-Fullkerson方法

10.10.2、Edmonds-Karp算法

10.10.3、Dinic算法

10.10.4、SAP算法

10.10.5、混合圆的欧拉回路

10.11、二分圆

10.12、最小割

10.13、费用流

相关文章:

算法竞赛ICPC、CCPC、NIO、蓝桥杯、天梯赛

算法竞赛前言一、为什么学习算法竞赛二、学习算法的阶段三、算法竞赛具体学习内容1、基础数据结构1.1、链表1.1.1、动态链表1.1.2、静态链表1.1.3、STL list1.2、队列1.2.1、STL queue1.2.2、手写循环队列1.2.3、双端队列和单调队列1.2.4、优先队列1.3、栈1.3.1、STL stack1.3.…...

图像分割技术及经典实例分割网络Mask R-CNN(含基于Keras Python源码定义)

图像分割技术及经典实例分割网络Mask R-CNN(含Python源码定义) 文章目录图像分割技术及经典实例分割网络Mask R-CNN(含Python源码定义)1. 图像分割技术概述2. FCN与语义分割2.1 FCN简介2.2 反卷积2.2 FCN与语义分割的关系3. Mask …...

元宇宙和医疗保健

让我们明确定义医疗保健领域的元宇宙 元宇宙这个概念已经有几十年的存在历史了,尽管当Facebook改名为Meta时,这个话题才成了头版头条。现在卫生部门的领导们也开始关注这个话题。 数字卫生领域对元宇宙的定义是如今的医疗科技主要是由医疗软件解决方案…...

iOS_从相机或相册里扫描二维码或条形码

文章目录1. 从相机里扫描1.1 申请相机权限1.2 创建Scanner1.3 开始扫描1.4 处理扫描结果2. 从相册里扫描2.1 获取相册权限2.2 打开相册2.3 获得选择结果2.4 解析相片中的二维码或条形码1. 从相机里扫描 1.1 申请相机权限 导入: import AVFoundation在项目的 Info.…...

Python 自动化指南(繁琐工作自动化)第二版:十六、使用 CSV 文件和 JSON 数据

原文:https://automatetheboringstuff.com/2e/chapter16/ 在第 15 章,你学习了如何从 PDF 和 Word 文档中提取文本。这些文件是二进制格式的,需要特殊的 Python 模块来访问它们的数据。另一方面,CSV 和 JSON 文件只是纯文本文件。…...

knife4j接口文档

knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名knife4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!其底层是对Springfox的封装,使用方式也和Springfox一致,只是对接口文档UI进行了优化。 核心功能…...

Windows机器安装SSH搭建,自己搞个局域网机房玩一玩

Windows机器安装SSH搭建为啥要装SSH安装OpenSSH使用 Windows 设置来安装 OpenSSHps脚本在线安装ps脚本离线安装其他二进制安装包安装为啥要装SSH 家里有多台Win机器,一台主机两个笔记本,本着不浪费的原则,打算把它们在平时的工作学习中利用起…...

二叉树的前序遍历(力扣144)

目录 题目描述: 解法一:递归法 解法二:迭代法 解法三:Morris 遍历 二叉树的前序遍历 题目描述: 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root […...

【数据库管理】①实例与数据库

1.Oracle RDBMS 架构图 2. Oracle 体系结构 由此区分database和instance的区别 No.1.oracle serverdatabase instance2.databasedata file、control file、redo log file3.instancean instance accesses a database4.oracle memorySGA PGA(oracle的内存结构)5.instanceSGA …...

vba:单元格的选择,查找,合并,批注,SpecialCells,图形插入

一: 活动单元格:activecell,工作表中活动单元格只有一个 Sub activecells() a activecell.Address 取得活动单元格地址 Cells(2, 3).Activate 激活指定单元格 End Sub selection光标所选区域 Sub 光标所选区域() Selection 1 End Sub Sub …...

【内网安全】横向移动域控提权NetLogonADCSPACKDC永恒之蓝

文章目录章节点横向移动-系统漏洞-CVE-2017-0146(永恒之蓝)影响版本插件检测-横向移动CS联动MSF-检测&利用横向移动-域控提权-CVE-2014-6324横向移动-域控提权-CVE-2020-1472影响版本横向移动-域控提权-CVE-2021-42287前提条件影响版本python版本EXP利用过程C#版本EXP利用过…...

将本地项目上传到远程仓库的步骤

文章目录将本地项目上传到远程仓库的步骤1.进入想上传的项目文件夹2.初始化本地仓库3.添加该项目下的所有文件4.将文件添加到本地仓库中5.添加远程仓库6.将文件更新到远程仓库上7.将本地文件推送回到指定的远程仓库中将本地项目上传到远程仓库的步骤 1.进入想上传的项目文件夹…...

selenium+opencv实现模拟登陆(滑块验证码)

很多网站登录登陆时都要用到滑块验证码,在某些场景例如使用爬虫爬取信息时常常受到阻碍,想着用opencv的模板匹配试试能不能实现模拟登陆。本来觉得网上资料多应该还蛮容易,但实际上手还是搞了蛮久,在这里记录一下整个流程&#xf…...

辽宁申请互联网医院牌照流程

辽宁申请互联网医院牌照流程|沈阳市|大连市|鞍山市|抚顺市|本溪市|丹东市|锦州市|营口市|阜新市|辽阳市|盘锦市|铁岭市|朝阳市|葫芦岛市   很多的人对互联网医院都不是很了解,也不太清楚互联网医院牌照怎么申请,其实牌照申请每个地区都不太一样&#x…...

java实现布隆过滤器

什么是布隆过滤器 布隆过滤器(Bloom Filter)是1970年由布隆提出来的。 它实际上是由一个很长的二进制数组一系列hash算法映射函数,用于判断一个元素是否存在于集合中。 布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和…...

gitlab部署及整合Jenkins持续构建(三)nexus私服的安装及实战、linux安装mysql

文章目录敏捷持续集成是什么?linux安装jdk和maven安装jdk安装mavenlinux安装nexus3.xnexus私服的使用编译安装mysql可能遇到的问题使用cmake时报错敏捷持续集成是什么? 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作&#x…...

一、Java基础(2)

本章概要 异常的分类及处理 异常的概念异常的分类处理异常的方式 反射机制 动态语言的概念反射机制的概念反射的作用Java 的反射 API反射的过程创建对象的两种方式Method 的 invoke 方法 1.2 异常的分类及处理 1.2.1 异常的概念 异常指在方法不能按正常方式完成时&#xf…...

软件设计师重要知识点——第一章——计算机组成与体系结构

目录 1.1数据的表示 1.2数值表示范围 1.3浮点的运算 1.4计算机结构 1.5计算机体系结构分类——Flynn 1.6指令的基本概念 1.7寻址方式 1.8CISC与RISC 1.9流水线 1.10层次化存储结构 1.11Cache 1.12主存——编址与计算 1.13总线 1.14串联系统与并联系统 1.15N模混…...

编程学习心得

我来写一些,我关于编程的简单认识吧。 我觉得编程是一门艺术,也是一项技能,需要不断地学习和练习。无论是初学者还是有经验的开发人员,都需要耐心和恒心,才能够成为一名优秀的程序员。以下是一些关于编程学习的心得和…...

web获取媒体流

1. 下面例子演示了录屏和截图功能&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport"…...

代码随想录算法训练营第四十二天 | 01背包问题,你该了解这些、01背包问题,你该了解这些 滚动数组、 416. 分割等和子集

打卡第42天&#xff0c;搞搞01背包。 今日任务 01背包问题&#xff0c;你该了解这些&#xff01;01背包问题&#xff0c;你该了解这些&#xff01; 滚动数组416.分割等和子集 背包问题1.0 &#xff1a;0-1 背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weig…...

【Android】JNI静态与动态注册介绍

JNI的两种注册机制&#xff1a;静态注册和动态注册. 一、JNI介绍 JNI(Java Native Interface)&#xff0c;即Java本地接口&#xff0c;JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C机型交互. 方式&#xff1a; 静态注册动态注册&#xff1a;需要提供Java中…...

【算法题解】22. 接雨水

这是一道 困难 题 题目来自&#xff1a; https://leetcode.cn/problems/trapping-rain-water/ 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,…...

集合详解之(四)集合的遍历

文章目录&#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;ArrayList集合forEach()方法遍历&#x1f380;for循环遍历&#xff08;针对List集合&#xff09;&#x1fa85;增强for循环&#xff08;也支持Set集合&#xff09;&#x…...

【I2C】通用驱动i2c-dev分析

文章目录1. 前言2. i2c-dev驱动的注册过程3. open_i2c_dev函数分析4. set_slave_addr函数分析5. i2c_read_bytes函数分析1. 前言 前面分析i2c-tool测试工具就是基于drivers/i2c/i2c-dev.c驱动来实现的。i2c-dev驱动在加载时会遍历所有的I2C总线(i2c_bus_type)上所有注册的adap…...

用GPT-4写代码不用翻墙了?Cursor告诉你:可以~~

目录 一、介绍 二、使用方法 三、其他实例 1.正则表达式 2.自动化测试脚本 3.聊聊技术 一、介绍 Cursor主要功能是根据用户的描述写代码或者进行对话&#xff0c;对话的范围仅限技术方面。优点是不用翻墙、不需要账号。Cursor基于GPT模型&#xff0c;具体什么版本不祥&#…...

硬件语言Verilog HDL牛客刷题day03 时序逻辑部分

1.VL21 根据状态转移表实现时序电路 1.题目&#xff1a; 某同步时序电路转换表如下&#xff0c;请使用D触发器和必要的逻辑门实现此同步时序电路&#xff0c;用Verilog语言描述。 2.解题思路 2.1 首先同步时序电路 &#xff0c; 时钟上升沿触发&#xff0c; 复位信号rst 低电…...

day31 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和 在本次的题目中&#xff0c;我们使用了贪心算法来解决三个问题&#xff1a;分发饼干、摆动序列、最大子序和。这三个问题都可以使用贪心算法来解决&#xff0c;而且贪心算法的时间复杂度相对较低&#xff0c;能够在较短的…...

MobTech 秒验|本机号码一键登录会泄露隐私吗

本机号码一键登录是一种新型的应用登录方式&#xff0c;它可以利用运营商的数据网关认证能力&#xff0c;实现手机号免密登录&#xff0c;提高用户体验和转化率&#xff0c;降低验证成本和流失率。本机号码一键登录支持三大运营商号码认证&#xff0c;3秒内完成手机号验证&…...

2023年供销合作社研究报告

第一章 行业概况 1.1 供销合作社概述 中华全国供销合作总社&#xff0c;是中华人民共和国全国供销合作社的联合组织。中华全国供销合作总社的前身可以追溯到1949年11月成立的中央合作事业管理局。在新中国成立初期&#xff0c;供销合作社就基本形成了自上而下、覆盖全国的组织…...