信竞 非常全面的知识点详解(涵盖...

物理
信竞 非常全面的知识点详解(涵盖C++、数据结构、算法)

用户头像
bits/stdc++.h 更新于2026-8-8 07:21:05
$\color{green}{\Huge{目录}}$
$\color{orange}{\Huge{第一章 C++语法基础}}$
1.程序基本结构
2.常量与变量及数学运算
3.输入输出流
4.指针和地址与输入输出函数
5.输入输出进阶与进制转化
6.数据类型及其转化
$\color{orange}{\Huge{第二章 C++分支结构与循环结构}}$
7.if-else if-else语句
8.switch-case-default语句
9.for循环
10.while循环和do-while循环
11.循环控制与循环嵌套
$\color{orange}{\Huge{第三章 线性数据结构基础}}$
12.数组
13.栈和队列
14.内存计算
$\color{orange}{\Huge{第四章 C++语法进阶}}$
15.逻辑运算与运算律
16.位运算
17.运算符优先级
18.库函数与cmath
19.自定义函数基础
20.自定义函数进阶与内联函数
21.流同步和缓冲区
22.结构体
$\color{orange}{\Huge{第五章 简单排序算法}}$
23.选择排序
24.冒泡排序
25.计数排序
$\color{orange}{\Huge{第六章 数据结构进阶与STL初步}}$
26.二维数组与多维数组
27.vector
28.stack与queue
29.list
30.priority_queue
31.deque
$\color{orange}{\Huge{第七章 更多的基础算法}}$
32.时间复杂度
33.贪心算法
34.前缀和
35.前缀和进阶
36.差分
37.差分进阶
38.二分
39.实数二分
40.递推
41.递归
42.归并排序
43.快速排序
44.sort与自定义排序
$\color{orange}{\Huge{第八章 数论算法}}$
45.最大公因数与最小公倍数
46.模运算性质及防负数取模
47.质数判断
48.算术基本定理
$\color{orange}{\Huge{第九章 树形数据结构基础}}$
49.树的定义及相关概念
50.树的深度优先遍历与广度优先遍历
51.二叉树的先中后序遍历
52.表达式
53.表达式树
$\color{orange}{\Huge{第十章 搜索算法基础}}$
54.深度优先搜索
55.广度优先搜索
56.记忆化搜索
$\color{orange}{\Huge{第十一章 枚举算法}}$
57.循环枚举及其优化
58.子集枚举
59.排列枚举
$\color{orange}{\Huge{第十二章 基于二进制的一些算法}}$
60.快速幂
61.倍增与ST表
$\color{orange}{\Huge{第十三章 其他技巧}}$
62.和式的处理技巧
63.离散化
64.预处理
65.空间换时间
$\color{orange}{\Huge{第十四章 C++语法再进阶与STL进阶}}$
66.类
67.作用域解析
68.重载运算符
69.upper_bound和lower_bound
70.max_element和min_element
71.迭代器
72.自动类型匹配
73.set与unordered_set
74.map与unordered_map
75.宏定义与万能头文件
$\color{orange}{\Huge{第十五章 树相关算法}}$
77.最近公共祖先
78.树上差分
79.DFS序
$\color{orange}{\Huge{第十六章 DP初步}}$
80.DP基本概念
81.经典例题之最大不邻项和
82.经典例题之最长上升子序列
83.经典例题之最长公共子序列
84.01背包初步
85.01背包优化
86.分组背包
87.完全背包
$\color{orange}{\Huge{第十七章 图初步}}$
88.图的定义及相关概念
89.图的遍历
90.拓扑排序与DAG的判定
91.连通块与泛洪算法
$\color{orange}{\Huge{第十八章 高级数据结构初步}}$
92.树状数组
93.线段树之建树与单点修改
94.线段树之区间查询
95.线段树之懒标记与区间修改
96.并查集
$\color{orange}{\Huge{第十九章 树进阶}}$
97.DFS序进阶
98.LCA进阶
$\color{orange}{\Huge{第二十章 图论算法基础}}$
99.最短路的松弛操作
100.Dijkstra算法
101.Dijkstra算法的优化
102.Bellman-Ford算法
103.SPFA算法
104.Floyd算法
105.Kruskal算法
$\color{orange}{\Huge{第二十一章 DP进阶}}$
106.树形DP
107.状压DP之常用位运算操作
108.哈密顿路径
$\color{orange}{\Huge{第二十二章 组合数学相关算法与数论进阶}}$
109.递推求组合数
110.直接求组合数
111.递推求逆元
112.直接求逆元
113.埃拉托色尼筛法
114.欧拉线性筛法
115.扩展欧几里德算法
$\Huge{\color{red}{先开个坑 之后会逐渐更新}}$
收起
8
7
共5条回复
时间正序
用户头像
bits/stdc++.h
19小时前
$\Huge{\color{red}{声明:在评论区更新,防止吞\LaTeX}}$
用户头像
bits/stdc++.h
19小时前

1.程序基本结构

在C++程序中,我们使用的绝大多数指令都被封装在一个一个的头文件中,要想调用这些指令,我们得先引入他们所在的头文件,语法为

#include <头文件名称>

然后,我们要写上这样一行

using namespace std;

它的作用以后会讲

另外,C++程序有一个入口点,程序从这里开始运行,这就是主函数 ,语法为

int main (){

     代码

}

最后在主函数最后一行写上return 0;这是程序结束的标志,然而作为最后一行也可不写它,因为程序执行完主函数会自动结束。

最终基本模板如下

#include <头文件>

using namespace std;

int main (){


    return 0;

}

用户头像
bits/stdc++.h
12小时前

2.常量与变量及数学运算

常量,顾名思义,就是恒定不变的量。

比如,我们有一个数998244353,我们要经常使用这个量,那么每次用它的时候都要在程序里写上998244353这个量,非常麻烦。但如果我们用一个别的东西代替他,比如字母p,那么用它的时候写一个p就行,这就是定义了p这个常量,其值为998244353,定义常量语法如下:

const 数据类型 常量名称 = 值;

存储整数,数据类型常用int,取值范围为$-2^{31}到2^{31}-1$,即-2147483648到2147483647

举个例子(栗子 : 我恐高,别举我)

const int p = 998244353;

这就实现了开头那个例子

有一点发现了吗?结尾有分号!看看之前的using namespace std;也是这么写的。其实,一般而言每句代码末尾都要加上他,但也有例外,比如头文件引入。还有一些也不用加分号,以后再讲。

其实const还有一个写法是constexpr,简单了解即可。作者本人倾向于写后者。

变量呢?Very easy! 把常量修饰符去掉即可。语法为

数据类型 变量名 = 值;

这个值不用非得一开始就赋,可以只定义不赋值。语法为

数据类型 变量名;

也可以定义多个变量,中间用逗号隔开,前提是类型相同。

🌰:

int a = 114514, mod, p = 123;

后期可以对变量的值进行修改。语法为

变量名 = 新的值;

运算很简单,变量、常量、数值三者间可以随意搭配进行计算。

加法减法和数学中的写法一样,乘法为*,除法为/,这里的除法默认向下取整。

🌰:

constexpr int A = 3;

int b;

b = A / 2;

此时b值为1

这一切都要在主函数中写。其实也可以在主函数外写,以后细讲。

最后强调:

变量名常量名千万别乱取!命名规则:

  1. 只能以数字,字母,下划线组成
  2. 不得以数字开头
  3. 不得用C++自带的指令
综合练习,以下代码运行完后,变量a的值是?

int main (){

    int a = 5;

    constexpr int c = 3;

    a = a * 5 / c;

    return 0;

}

加餐;

a = a + b;等价于a += b;

其余三者同理。

a = a + 1;等价于a++;或++a;区别以后讲。

减法同理。


用户头像
bits/stdc++.h
3小时前
3.输入输出流

头文件:iostream
下面开始介绍。
输出一个东西,要用cout指令,他的语法是
cout << 内容;
内容是啥都行,可以是字符串(用双引号包起来),也可以是字符(用单引号包起来),也可以是数字,也可以是常量和变量,也可以是换行(写为'\n'或endl,区别比较高深,以后会讲)。如果不换行的话,所有的内容都会挤在一起,所以可以选择加入空格来区分他们。
若要输出多个内容的话,多写几个<<即可。
🌰:
cout << 114 << 514 << endl << 2 << ' ' << 7;
输出结果为
114514
2 7
输入用cin。为啥要先讲变量再讲输入呢?这么问答案其实已经泄漏出来了。输入数据要使用变量进行存储,否则数据就丢了。
语法为
cin >> 变量;
输入多个数据时,处理逻辑与cout相同。不过输入数据要用空格或换行隔开,否则会被当成一个数据处理。
🌰:
输入 :
14159 2653
代码:
#include <iostream>
using namespace std;
int main(){
    int a,b;
    cin >> a >> b;
    cout << a << b * 10 + 5;
    return 0;
}
输出:
1415926535

用户头像
沐辛和雪橇犬『MT19937』
1小时前
bro我认为你可以在最后放几道题目讲讲
1条评论
用户头像
bits/stdc++.h
1小时前

OK,从第五节开始放题