有关CSP-J初赛的一些题目解法
Quartz_Blocks
·
·
个人记录
本文使用 \LaTeX 对一些公式进行排版,Markdown 用于制作文章格式。
本文当中的部分内容为AI总结,经过人工审核,大致是最近本人在练习一些模拟题时的一些特殊的、较难的、容易错的知识点。欢迎各为补充。
有关组合
如何计算组合数
组合数,也称为二项式系数,表示为 \binom{n}{k},是从 n 个不同元素中不考虑顺序地选择 k 个元素的方法数。它的计算公式是:
\binom{n}{k} = \frac{n!}{k!(n-k)!}
其中 n! 表示 n 的阶乘,即从 1 乘到 n 的乘积。
例子
计算 \binom{5}{2}:
- 首先确定 n 和 k 的值:在这里,n=5 和 k=2。
- 使用公式计算:
\binom{5}{2} = \frac{5!}{2!(5-2)!} = \frac{5!}{2!3!}
- 计算阶乘:
5! = 5 \times 4 \times 3 \times 2 \times 1 = 120
2! = 2 \times 1 = 2
3! = 3 \times 2 \times 1 = 6
- 代入并简化:
\binom{5}{2} = \frac{120}{2 \times 6} = \frac{120}{12} = 10
因此,\binom{5}{2} = 10,意味着从 5 个不同的元素中选择2个元素的组合方式有 10 种。
同余
概念:如果两个整数 a 和 b 除以正整数 m 的余数相同,则称 a 与 b 对模 m 同余,记作 a ≡ b\,\, (\bmod \,m)
性质:
反身性:a ≡ a \,\,(\bmod\, m)
对称性:若 a ≡ b\, (\bmod \,m),则 b ≡ a \,(\bmod \,\,m)
传递性:若 a ≡ b \,(\bmod \,\,m) 且 b ≡ c \,(\bmod \,\,m),则 a ≡ c\, (\bmod \,\,m)
加减乘运算:同余式两边可以相加、相减、相乘
易错点:同余式两边不能直接相除,除非除数与模数互质
欧拉函数
欧拉函数 φ(n):表示小于等于 n 的正整数中与 n 互质的数的个数
e.g. \varphi(5) = 4 (1,2,3,4)
若 n 是质数,则 φ(n) = n-1.
若 n = p₁ᵃ¹ × p₂ᵃ² × ... × pₖᵃᵏ,则 φ(n) = n × (1-1/p₁) × (1-1/p₂) × ... × (1-1/pₖ)
欧拉定理:若 a 与 n 互质,则 a^φ(n) ≡ 1 (mod n)
应用:简化大指数模运算,如计算7¹⁰⁰ mod 10 = 7^(φ(10)=4)²⁵ mod 10 = 1²⁵ = 1
简单的 CRT
求解较小的CRT问题
例子:一盒围棋子,4个4个数多3个,6个6个数多5个,15个15个数多14个,棋子在150~200个,棋子共几个?( )。
方法:暴力枚举
枚举最大的值可以得到数列
[\dots,149,164,179,194,\dots]
筛选 \bmod 4 \ne 3 的项,得到
[\dots,179,\dots]
## 一些符号
在数字逻辑和布尔代数中,"与"(and)通常用符号 $∧$ 或者 "&" 表示,而 "或"(or)通常用符号 $∨$ 表示。这些符号用于表示逻辑运算中的与操作和或操作。
例如:
- a $∧$ b 表示 a 和 b 的逻辑与(a and b)
- a $∨$ b 表示 a 和 b 的逻辑或(a or b)
在不同的编程语言中,这些操作可能有不同的符号或关键字。例如,在c语言及其衍生语言中,逻辑与使用 `&&`,逻辑或使用 `||`。在python中,逻辑与使用 `and`,逻辑或使用 `or`。
## 图论
一张有 $x$ 个节点非连同的无向图最多有多少条边?
非连通无向图意味着图中至少有两个结点之间没有路径相连。对于有 $x$ 个结点的非连通无向图,最多的边数发生在图是非连通的且有一个结点与其他所有结点都不相连的情况下。
假设有一个结点与其他所有结点都不相连,那么剩下的 $x-1$ 个结点可以构成一个完全图,即任意两个结点之间都有一条边相连。
一个有 $n$ 个结点的完全图有 $\frac{n(n-1)}{2}$ 条边。因此,当 $x-1$ 个结点构成一个完全图时,边的数量为:
$$\frac{(x-1)(x-2)}{2}$$
所以,一张有 $x$ 个结点的非连通无向图最多有 $\color{red}\frac{(x-1)(x-2)}{2}$ 条边。
## 博弈论
不要把博弈论当成很难的东西。
### Nim 游戏
Nim游戏及其变种是一类在组合博弈论中具有重要地位的游戏。Nim游戏本身以及其各种变体,不仅丰富了博弈论的研究内容,也为算法设计和策略规划提供了广泛的应用场景。以下将详细探讨Nim游戏及其几种主要变体的玩法、策略和影响因素:
1. **经典Nim游戏**:
- 玩法:两位玩家轮流从若干堆石子中任意选择一堆,从中取出至少一颗石子,最多可取走该堆中的所有石子。能取走最后一颗石子的玩家获胜。
- 策略:游戏的关键在于计算所有石子堆的异或和。如果异或和为0,则当前玩家处于必败状态,否则为必胜状态。玩家需要尝试通过每一步的操作,将异或和转换为0,以将对手置于必败状态。
2. **阶梯Nim游戏**:
- 玩法:与经典Nim类似,但增加了可以从任一堆石子中取出石子后加入到其他堆中的规则。
- 策略:这种变体中,除了考虑石子的异或和外,还需要考虑石子的移动策略对局面的影响。例如,如何有效地利用石子的移动来改变各堆的石子数,从而影响整体的异或和。
3. **Anti-Nim游戏**:
- 玩法:与经典Nim相反,取走最后一颗石子的玩家输。
- 策略:这种变体要求玩家尽量避免取走最后一颗石子。策略上更侧重于预测对手的行动并据此调整自己的行动,尽量使对手处于必败情况。
4. **集合Nim游戏**:
- 玩法:每次操作必须从任意堆中取走属于指定集合S的一些石子。
- 策略:这种变体的策略需要玩家了解集合S的特性,并基于这些特性制定取石子的策略。同时,也需考虑如何通过特定的取法来改变整体的异或和,从而使对手处于不利的局面。
5. **拆分Nim游戏**:
- 玩法:玩家可以选择将任意一堆石子拆分成两堆,或者将两堆石子合并成一堆。
- 策略:这个变体中,拆分和合并的策略至关重要。玩家需要根据当前各堆石子的数量,选择最优的拆分或合并方式,以达到最终的胜利条件。
总结以上内容,Nim游戏及其变种要求玩家具备良好的数学逻辑思维能力和策略规划能力。每一种变体虽然在规则上有所变化,但核心都围绕着如何通过策略性的行动来控制游戏的局面,最终达到胜利的目标。对于博弈论研究者和爱好者而言,深入研究这些游戏不仅能够提升自身解决问题的能力,还能增进对策略性思维的理解和应用。
## 堆
堆其实不难,只要你对树大概了解,那么堆也很简单。
你只需要知道:
- 堆是一颗完全二叉树
- 最大堆:父亲 $\ge$ 孩子
- 最小堆:父亲 $\le$ 孩子
### 判断堆
例题:
$$[16,23,53,31,94,72]$$
这个序列是不是堆?
第一步:将这个序列生成一个堆
拆分 $2^0$ 个值,得到 $[16]$。
拆分 $2^1$ 个值,得到 $[23,53]$。
拆分 $2^2$ 个值,发现不够,直接放即可,得到 $[31,94,72]$。
最后生成了这个:

发现 $31 > 23 > 16$,$\,\,\,\,\,94 > 23$,$\,\,\,\,\,72 > 53 > 16$, 每一个父亲结点小于其根节点,构成了一个最小堆。
结论:它是一个堆。
## 更新日志
- update 1.0.0 第一版本 2024/09/09 18:26
- update 1.0.1 更新 Nim 游戏和一些变种 2024/09/10 21:03
- update 2.0.0 啥也没更新 25/09/11 21:52