初赛知识点整理

· · 个人记录

可能有点乱……

数学问题

排列组合

排列

公式推导及结果: $$\begin{aligned} A_m^n &= m \times (m - 1) \times m \times (m - 2) \times \dots \times m \times (m - n+1)\\ \color{red}A_m^n & \color{red}= {\dfrac{m!}{(n-m)!}} \end{aligned}$$ ### 组合 $C_m^n$:从 $1-m$ 个不同元素种取出 $n$ 个元素的不同方案个数(**不考虑顺序**)。 公式推导及结果: $$\begin{aligned}A_m^n &= C_m^n \times n!\\C_m^n&=\dfrac{A_m^n}{n!}\\ \color{red}C_m^n&\color{red}= {\dfrac{m!}{(n-m)!\times n!}} \end{aligned}$$ ### 附加 + $\large C_x^0 = 1 ,\space C_x^x = 1, \space C_x^1 = x

技巧 & 归类

  1. 插板法

    n 个物品,分为 m 组,每组最少 k 个,求有多少种分法。

    相当于有 n1n-1 个空,要用 m-1 个隔板进行分组,每组不少于 k 个。

    \begin{matrix}\underbrace{1+1+\cdots+1}\\n \texttt 个 \end{matrix} = n

    可以将问题简化成:每组 \ge 1,共有 n - (k - 1) \times m1,有多少种分法。

    可得 x_1 + x_2 + \cdots + x_m = n - (k-1) \times m

    这时每组 \ge 1,有 n - (k-1) \times m-1 个空,用 m-1 个隔板,所以是 \large C_{n - (k-1) \times m-1}^{m-1}

  2. 问题

    容易想到:如果有多于一个的组所分的数目相同(类似于第一个组分 $x$ 个,第二个组也分 $x$ 个),就会被重复计算。(如果不相同则不会被重复计算) 设有 $m$ 组数目相同,则答案为 $\dfrac{ C_n^{k_1} \cdot C_{n-k_1} ^ {k_2}\cdot C_{n-k_1 - k_2} ^ {k_3} \cdots C^{k_k}_{k_k}}{A_m^m}$。

例题

  1. 从黄瓜、白菜、油菜、扁豆 4 种蔬菜品种中选出 3 种,分别种在不同土质的三块土地上,其中黄瓜必须种植,不同的种植方法共有 ({\color{blue}18}) 种。

  2. 书架上原来并排放着 5 本不同的书,现在要再插入 3 本不同的书,那么不同的插法共有 ({\color{blue}336}) 种。

    解析:首先考虑插入第一本书,5 本书共有 6 个空。然后插入第二本,此时有 6 本书,7 个空。以此类推插入第三本时有 8 个空。

    固答案为 6 \times 7 \times 8=336

  3. 解析:每人只有2个选择,报名方法有 $2^5=32$ 种.
  4. 甲乙两人从 4 门课程种各选修 2 门,两人恰好选择同一门科目的情况有 ({\color{blue}24}) 种。

    解析:首先,同一门科目的选择有 C_4^1 种;其次,甲的另一门科目能选择的有 3 种,所以乙的另一门科目有 2 种选择,固答案为 4 \times 3 \times 2 = 24

  5. 4 个不同点构成的简单无向联通图的个数是 ({\color{blue}38})

    解析:考虑有 3 条边,共有 C_6^3 = 20 种情况。此时,不一定是一个连通图,需要减去。三条边构成环的 4 种情况,即有 20-4 = 16

    考虑有 4 条边,共有 C_6^4 = C_6^2 = 15 种情况。

    考虑有 5 条边,共有 C_6^5 = C_6^1 = 6 种情况。

    考虑有 6 条边,共有 1 种情况。

    求和,答案为 16+15+6+1=38

  6. 1,2,3,4,5 组成没有重复数字且 1,2 不相邻的五位数,则所有不同的排法有 ({\color{blue}72}) 种。

    解析:先考虑 3,4,5 相邻的情况,共有 A_3^3 = 6 种。于是有:\texttt{\_x\_x\_x\_ (x 表示已填数)}

    然后用插板法,将 1,2 插入空中,共有 A_4^2 = 12 种插法。

    所以答案为 6 \times 12 = 72

  7. 马路上有编号为 1,2,\cdots,9 九盏路灯,现在要关掉其中的三盏,但不能关掉相邻的两盏或三盏,也不能挂掉两端的两盏,满足条件的关灯方案有 ({\color{blue}30}) 种。

    解析:插板法。先把要关的三盏灯拿出来,剩下 6 栈灯,有 5 个空,因为不能相邻,所以是要选 3 个空。答案为 C_5^3 = 30

数据结构

二叉树

性质

扩充二叉树

概念:扩充二叉树是指将原二叉树中每个凡缺少左、右孩子的结点,均扩充为带左、右两个孩子。

哈夫曼树

构造

哈夫曼(Huffman)最早给出一个带有一般规律的算法(哈夫曼算法):

  1. 根据给定的 n 个权值 \{W_1 ,W_2 ,\cdots, W_n\} 构成 n 棵二叉树的集合 F=\{T_1 ,T_2 ,\cdots,T_n\},其中每棵二叉树 T_i 中只有一个带权为 W_i 的根结点,其左右子树均空。

  2. F 中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新树的根结点的权值为其左右子树根结点的权值之和。

  3. F 中删除这两棵树,同时将新树加入 F 中。

  4. 重复 \texttt{2}\texttt{3},直到 F 中只含一棵树为止。

计算机相关

二进制

运算

例题

  1. 在 C++ 语言中,表达式 23 | 2 \oplus 5 的值是 ({\color{blue}23})

    解析:C++ 中,\oplus 的优先级大于 |

算法

排序

排序算法 是否稳定
选择 非稳定
插入 稳定
冒泡 稳定
希尔 非稳定
归并 稳定
快排 非稳定
堆排 非稳定
计数 稳定
稳定
基数 稳定

错题笔记

梦熊联盟·提高组CSP-S 2024初赛考前模拟卷

Linux 命令

命令

sudo 命令管理员权限执行命令。

vi 编辑命令

man 显示命令的手册页,获取命令的详细信息。

nano 编辑文件/打开新文件

echo 输出文本,文本重定向,转义字符,向文件追加文本,将文本写入新文件,输出提示信息,生成配置文件,写入日志文件,逻辑处理,好像什么都能用

文件和目录管理

ar 创建、修改备存文件或从备存文件中提取文件。

ls:列出目录内容,

cd 改变当前工作目录,cd /path/to/directory 切换到指定目录,cd .. 切换到上一级目录,cd \~ 切换到用户主目录。

pwd 显示当前工作目录的路径。

mkdir 创建新目录,mkdir new_directory 创建新目录,mkdir -p /path/to/new_directory 递归创建多级目录。

rm 删除文件和目录。

cp:复制文件和目录

mv:移动或重命名文件和目录,mv old_name new_name 重命名文件或目录,mv file /path/to/destination 移动文件或目录到指定位置。

touch:创建空文件或更新文件时间戳,touch new_file 创建新文件或更新现有文件的时间戳。

cat:显示文件内容,适合查看较小文件。

more:分页打开文件。

less:分页查看文件内容,适合查看较大文件,类似于 more,但允许方向操作。

head:显示文件的前几行。

tail:显示文件的最后几行。

scp:在本地计算机和远程计算机之间复制文件。

tar:打包和解压文件。

gzipgunzip:压缩和解压文件。

find:在目录树中查找文件。

chmod:改变文件或目录的权限。

chown:改变文件或目录的所有者和所属组。

grep:在文件中搜索特定的字符串。

系统管理

reboot:重启计算机。

shutdown:关闭计算机。

top:查看系统进程信息。

ps:查看进程状态。

kill:终止进程。

ssh:远程登录其他计算机。

df:显示磁盘空间使用情况。

du:显示目录或文件的磁盘使用情况。

网络管理

ping:测试网络连通性。

netstat:查看网络连接状态。

ifconfigip addr show:显示和配置网络接口信息。

wgetcurl:从网络上下载文件。

GDB 命令相关

AI 生成:

GDB(GNU调试器)是一个强大的工具,主要用于调试 C、C++、Fortran 和汇编语言程序。以下是 GDB 的一些核心命令:

启动与退出‌

gdb 启动GDB。 gdb <程序名> 启动GDB并加载指定的可执行文件。 quitq 退出GDB。

断点操作‌

break <行号>或b <行号>:在指定行号设置断点。 break <文件名>:<行号>:在指定文件的指定行号设置断点。 info breaki b:查看断点信息。 delete [breakpoint number]:删除一个或多个断点。

‌程序执行‌

runr:开始或重新开始程序的执行。 continuec:继续执行程序直到下一个断点或其它停止条件。 nextn:执行下一条指令,不进入函数体。(单步执行) steps:执行下一行代码,进入函数体。(单步执行) display:在每次程序暂停时自动显示指定的变量或表达式的值。 finish:执行到当前函数返回,然后停下来等待用户输入。 until:执行到指定的行号停下来,但不进入函数内部。 call:在当前位置调用一个函数,并可以传递参数。 return:强制函数返回,并可以指定返回值。 x:检查存储器和寄存器的内容。 thread:用于多线程调试,可以切换当前线程、查看线程信息等。 backtrace(或bt):打印栈帧的调用序列,用于查看函数的调用关系。

其他

print(或 p):打印表达式的值。 list(或 l):列出源代码。可以指定行号或函数名来列出相关的源代码。 info:提供关于程序的各种信息,如断点、寄存器、栈帧等。 watch:设置一个监视点,当指定的变量或表达式的值发生变化时,程序会暂停执行。 set:用来设置或改变 GDB 中的变量或参数的值。 undo:撤销上一个 GDB 命令。

语法相关

运算

优先级

算法相关

先序遍历 + 中序遍历 = 一棵确定的二叉树

后序遍历 + 中序遍历 = 一棵确定的二叉树

先序遍历 + 后序遍历 = 啥也不是

哈夫曼树

哈夫曼(Huffman)最早给出一个带有一般规律的算法(哈夫曼算法):

  1. 根据给定的 n 个权值 \{W_1 ,W_2 ,\cdots, W_n\} 构成 n 棵二叉树的集合 F=\{T_1 ,T_2 ,\cdots,T_n\},其中每棵二叉树 T_i 中只有一个带权为 W_i 的根结点,其左右子树均空。
  2. F 中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新树的根结点的权值为其左右子树根结点的权值之和。
  3. F 中删除这两棵树,同时将新树加入 F 中。
  4. 重复 \texttt{2}\texttt{3},直到 F 中只含一棵树为止。

扩充二叉树

概念:扩充二叉树是指将原二叉树中每个凡缺少左、右孩子的结点,均扩充为带左、右两个孩子。

I_k+1 = I_k + L \\ & = E_k + L + 2 \\ & = ( I_k + 2 k ) + L + 2\\ & = I_k + L + 2 k + 2 \\ & = I_{k+1} + 2 (k+ 1) \end{aligned}

二叉树

n = n_0 + n_1 + n_2 \space \;\;\;\;\;\;\;\;\; (1)

​ 树中结点之间的连线成为分支。树中除根结点外,其余每个结点都有一个分支进入,设 A 为二叉树分支的总数,则有:

A = n - 1

另一方面,这些分支都是由度为 12 的结点射出的,所以

A = n_1 + 2 \times n_2

​ 所以

n - 1 = n_1 + 2 \times n_2 \;\;\;\;\;\; (2)

​ 联立 (1),(2),可得 n_0 = n_2 + 1

二叉搜索树 BST

二叉搜索树是一种二叉树的树形数据结构,其定义如下:

  1. 空树是二叉搜索树。
  2. 若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。
  3. 若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其根节点的值。
  4. 二叉搜索树的左右子树均为二叉搜索树。
  5. 二叉搜索树上的基本操作所花费的时间与这棵树的高度成正比。对于一个有 n 个结点的二叉搜索树中,这些操作的最优时间复杂度为 O(\log n),最坏为 O(n) (链)。随机构造这样一棵二叉搜索树的期望高度为 O(\log n)
  6. 给定n个不同数值的点构成的二叉搜索树有卡特兰数种。

排序

排序算法 是否稳定 最优时间复杂度 平均时间复杂度 最坏时间复杂度
选择 非稳定 O(n^2) O(n^2) O(n^2)
插入(Insertion) 稳定 O(n) O(n^2) O(n^2)
冒泡 稳定 O(n) O(n^2) O(n^2)
希尔(Shell) 非稳定 O(n) 与选取方式有关 O(n^2)
归并 稳定 O(n \log n) O(n \log n) O(n \log n)
快排 非稳定 O(n \log n) O(n \log n) O(n^2)
堆排(Heap) 非稳定 O(n \log n) O(n \log n) O(n \log n)
计数 稳定 O(n+w) O(n+w) O(n+w)
稳定 O(n) O(n+n^2/k+k) O(n^2)
基数(Radix) 稳定 O(kn+\Sigma w_i) O(kn+\Sigma w_i) 无,但是会炸空间
锦标赛(树形选择) 非稳定 O(n \log n) O(n \log n) O(n \log n)
Tim 稳定 O(n) O(n \log n) O(n \log n)

注:w 为数的值域。k 为分出的块数。

数学

咕咕咕咕咕咕咕咕咕咕咕