CSP-S 初赛问题求解与选择题
Posted believe-r
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSP-S 初赛问题求解与选择题相关的知识,希望对你有一定的参考价值。
# CSP-S 初赛问题求解与选择题
## 时间复杂度计算
公式:对于 $T(n) = a \times T(\dfracnb)+O(n^d)$ 这个递推式,其时间复杂度为:
$$
T(n) =
\begincases
O(n^\log_b a) , \ a > b^d \\
\\
O(n^d \lg n) , \ a = b^d \\
\\
O(n^d) , \ a<b^d
\endcases
$$
## 鸽巢原理
### 基本定义
若有 $n$ 个鸽巢,$n+1$ 只鸽子,则至少有一个鸽巢里至少有两只鸽子。
变形:
1. 一年 $365$ 天,今有 $366$ 个人,则其中至少有两个人生日相同。
2. 抽屉里有 $10$ 双手套,从中取 $11$ 只出来,其中至少有两只是完整配对的。
### 经典例题
1. ($NOIP \ 2012$ )如果平面上任取 $n$ 个整点(横纵坐标都是整数),其中一定存在 $2$ 个点,它们连线的中点也是整点,那么 $n$ 至少是( )。
**解:**存在 $2$ 个点中点是整点,要求两点横纵坐标奇偶性都相同。根据鸽巢原理,$n$ 至少是 $2 \times 2+1=5$
2. 在边长为 $1$ 的正方形内任取 $5$ 点,则其中至少有 $2$ 点的距离不超过( )。
**解:**如下图所示,将一个正方形分成四份,那么至少有 $2$ 个点在同一个小正方形里面。在同一个正方形里面的两点最长距离即为 $\dfrac\sqrt22$ 。
![1570161350854](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1570161350854.png)
3. 证明:一位国际象棋大师有 $11$ 周的时间备战比赛,他决定每天至少下 $1$ 盘棋,但每周不超过 $12$ 盘。则存在连续若干天,他恰好下了 $21$ 盘棋。
**解:**令 $a_i$ 为到第 $i$ 天下的总盘数,那我们要证明存在 $i,j$ 满足 $a_i+21=a_j$ 。
? $\because$ 他每天至少下 $1$ 盘棋
? $\therefore$ $a_i$ 是单调递增的
? $\therefore$ $1 < a_1 < a_2 < \ldots < a_77 < 11 \times 12=132$
? $\therefore$ $22 < a_1+21 < a_2+21 < \ldots < a_77+21 < 132+21=153$
? 上下两式总共有 $153$ 种取值,却有 $154$ 个数,所以存在 $i < j$ 满足 $a_i+21=a_j$。
### 加强形势
现有鸽巢 $n$ 个,鸽子 $m_1+m_2+ \cdots +m_n-n+1$ 只,其中 $m_1,m_2, \ldots ,m_n, n \in \N^*$
**结论:**鸽巢 $1$ 鸽子数 $> m_1$,或鸽巢 $2$ 鸽子数 $> m_2$,…… 或鸽巢 $n$ 鸽子数 $> m_n$,至少有一个成立。
### 扩展内容:Erdös-Szekeres 定理
在由 $n^2+1$ 个实数构成的序列中,必然含有长为 $n+1$ 的单调(增或减)子序列。
## Ramsey 问题
命题:$6$ 人中或者至少存在 $3$ 人互相认识,或者至少存在 $3$ 人互相不认识。
等价问题:六个顶点的完全图的边,用红、蓝二色任意着色,则至少存在一红色边三角形,或一蓝色边三角形。
## 排列组合
### 前置知识
$A_n^n = n! $
$A_n^m = n(n-1)(n-2) \cdots (n-m+1) = \dfracn!(n-m)!$
$C_n^m = \dfracA_n^mA_m^m = \dfracn(n-1)(n-2) \cdots (n-m+1)m! = \dfracn!m!(n-m)! $
另外,规定 $C_n^0 = 1$
圆排列(在一个圆里,经旋转后相同算同一种解):$Q_n^r = \dfracA_n^rr = \dfracn!r \cdot (n-r)!$
### 重要定理及证明
1. $\ C_n^m = C_n^n-m$
我们可以这么想:组合就是从 $n$ 个元素中随机抽出 $m$ 个元素,那这样和从 $n$ 个元素中抽出 $n-m$ 个元素保留不是一个道理吗?所以就有了这个公式:$\ C_n^m = C_n^n-m$
2. $C_n+1^m = C_n^m + C_n^m-1$ **【记牢,经常用!!!】**
> 方法1:我们可以这么想:假设集合 $A$ 中现在有 $n+1$ 个元素,分别为 $a_1,a_2,\cdots,a_n+1$ ,那么从集合 $A$ 中抽出 $m$ 个元素,就可以分类讨论:如果抽出的元素中不含有 $a_1$ ,那么就是从 $n$ 个元素中抽出 $m$ 个元素,一共有 $C_n^m$ 种;如果抽出的元素中含有 $a_1$,那么就有 $C_n^m-1$ 种方法。所以 $C_n+1^m = C_n^m + C_n^m-1$。
>
> 方法2:阶乘证明:
>
> $\because$ 左边 $=$ $\dfrac(n+1)!m!(n+1-m)!$
>
> $\because$ 右边 $= $ $\dfracn!m!(n-m)! + \dfracn!(m-1)!(n+1-m)! = \dfracn!(n-m+1)m!(n+1-m)! + \dfracn! \cdot mm!(n+1-m)! = \dfrac(n+1)!m!(n+1-m)!$
>
> $\therefore$ 左边 $=$ 右边
>
> $\therefore \ C_n+1^m = C_n^m + C_n^m-1$
>
> 方法3:杨辉三角形的任意一个数都等于它肩上的两个数之和,再结合二项式定理,就可以得出这个规律。
3. $C_n^m = \dfracm+1n+1 C_n+1^m+1$
同样,这里也可以用阶乘来证明:
$\because$ 左边 $=$ $\dfracn!m!(n-m)! $
$\because$ 右边 $=$ $\dfracm+1n+1 \cdot \dfrac(n+1)!(m+1)!(n+1-m-1)! = \dfracm+1n+1 \cdot \dfrac(n+1)!(m+1)!(n-m)! = \dfracm+1n+1 \cdot \dfracn! (n+1)m!(n-m)!(m+1) = \dfracn!m!(n-m)!$
$\therefore$ 左边 $=$ 右边
$\therefore$ $C_n^m = \dfracm+1n+1 C_n+1^m+1$
4. 一个含有 $n \ (n \in N^*)$ 个元素的集合 $A = \ a_1,a_2,\cdots , a_n \$,不同的子集又 $2^n$ 个。
### 二项式定理
1. 俗话来说,就是**杨辉三角形**!
2. 二项式定理公式:
$$
\large (a+b)^n = C_n^0a^n + C_n^1a^n-1b^1 + \cdots + C_n^ka^n-kb^k + \cdots +C_n^nb^n (n \in N^*)
$$
3. 二项式定理通项:
$$
\large T_k+1 = C_n^ka^n-kb^k
$$
4. 二项式系数之和:
令 $(a+b)^n = C_n^0a^n + C_n^1a^n-1b^1 + \cdots + C_n^ka^n-kb^k + \cdots +C_n^nb^n (n \in N^*)$,那么 $C_n^0 + C_n^1 + \cdots + C_n^n = 2^n$
> 证明:
>
> 用赋值法,令 $a = b = 1$,那么 $(a+b)^n = C_n^0 + C_n^1 + \cdots + C_n^n = (1+1)^n = 2^n$
5. 二项式系数最值问题:
都知道杨辉三角形其实是一个十分对称的三角形,每一行的最大值就是在这一行最中间的那个数。对于 $(a+b)^n$,展开后只要关注$\dfracn2$ 的值。如果 $\dfracn2$ 的值是整数,那么二项式系数的最大值就是 $C_n^\fracn2$ ;反之,如果 $\dfracn2$ 是小数,那么二项式系数的最大值就是 $C_n^[\fracn2] , C_n^[\fracn2]+1$ ( $[x]$ 表示对 $x$ 向下取整)。
### 错位排列
问题:有 $n$ 个信封和 $n$ 个信箱,分别编号为 $1$ 到 $n$,相同编号的信封和信箱不能放一起,则有几种方法?
公式:$f(n)=(n-1)(f(n-1)+f(n-2))$
错位排列的前几项:$0,1,2,9,44,265$
**并不是所有的问题都适用排列组合,视情况而定!**
## 卡特兰数
### 公式
先看这个问题:在 $n \times n$ 的网格里从左下角走到右上角的不经过 $y = x$ 这条线的单调路径的条数。
![](D:\卡特兰数.png)
路径条数即为:$\dbinomn2n - \dbinomn-12n = \dfrac1n+1 \dbinomn2n$
卡特兰数通式即为:$C_n = \dbinomn2n - \dbinomn-12n = \dfrac1n+1 \dbinomn2n$
卡特兰数的递推公式 $1$:$C_n = C_0 \times C_n-1 + C_1 \times C_n-2 + \cdots + C_n-1 \times C_0,C_0 = 1$
卡特兰数的递推公式 $2$:$C_n = \dfracC_n-1 \times (4 \times n - 2)n+1$
### 应用
1. 求带限制条件的路径条数
2. 求合法的括号序列的个数
3. 求出栈次序
4. 买票找票问题:有 $2n$ 个人排成一行进入剧场。入场费 $5$ 元。其中只有 $n$ 个人有一张 $5$ 元钞票,另外 $n$ 人只有 $10$ 元钞票,剧院无其它钞票,问有多少种方法使得只要有 $10$ 元的人买票,售票处就有 $5$ 元的钞票找零?(将持 $5$ 元者到达视作将 $5$ 元入栈,持 $10$ 元者到达视作使栈中某 $5$ 元出栈)
5. 排队问题:现在有 $2n$ 个人,他们身高互不相同,他们要成两排,每一排有 $n$ 个人,并且满足每一排必须是从矮到高,且后一排的人要比前一排对应的人要高,问有多少种方案。
6. 凸多边形三角划分:在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。任务是输入凸多边形的边数 $n$,求不同划分的方案数 $f(n)$。
7. 给定节点构成二叉搜索树
## 指针问题
### 指针定义
C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址。CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位。这里,数据对象是指存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:**指针是一种保存变量地址的变量**。
### 如何定义一个指针
指针其实就是一个变量,指针的声明方式与一般的变量声明方式没太大区别,下面举了几个栗子:
```cpp
int *p; // 声明一个 int 类型的指针 p
char *p // 声明一个 char 类型的指针 p
int *arr[10] // 声明一个指针数组,该数组有10个元素,其中每个元素都是一个指向 int 类型对象的指针
int (*arr)[10] // 声明一个数组指针,该指针指向一个 int 类型的一维数组
int **p; // 声明一个指针 p ,该指针指向一个 int 类型的指针
```
声明一个指针变量并不会自动分配任何内存。在对指针进行间接访问之前,指针必须进行初始化:或是使他指向现有的内存,或者给他动态分配内存,否则我们并不知道指针指向哪儿。同时,对指针进行初始化后,便可以正常对指针进行赋值了。 初始化的操作如下:
```cpp
/* 方法:使指针指向现有的内存 */
int x = 1;
int *p = &x; // 指针 p 被初始化,指向变量 x ,其中取地址符 & 用于产生操作数内存地址
```
就如下面这个程序,输出为:`1 2`
```cpp
#include <bits/stdc++.h>
int main()
int x = 1;
int *p = &x;
printf("%d ",*p);
*p = 2;
printf("%d\n",*p);
return 0;
```
### NULL指针
NULL 指针是一个特殊的**指针变量**,表示不指向任何东西。可以通过给一个指针赋一个零值来生成一个 NULL 指针。
### 指针的运算
1. 指针 $+/-$ 整数
可以对指针变量 $p$ 进行 `p++`、`p--`、`p+i` 等操作,所得结果也是一个指针,只是指针所指向的内存地址相比于 $p$ 所指的内存地址前进或者后退了 $i$ 个操作数。
2. 指针 $-$ 指针
只有当两个指针都指向同一个数组中的元素时,才允许从一个指针减去另一个指针。减法运算的值是两个指针在内存中的距离(以数组元素的长度为单位),因为减法运算的结果将除以数组元素类型的长度。举个例子:
```cpp
#include "stdio.h"
int main()
int a[10] = 1,2,3,4,5,6,7,8,9,0;
int sub;
int *p1 = &a[2];
int *p2 = &a[8];
sub = p2-p1;
printf("%d\n",sub); // 输出结果为 6
return 0;
```
## 逻辑运算
1. 概念:非:not $ ¬$ 与:and $∧$ 或:or $∨$ 异或:xor $⊕$
2. 运算符的优先级:
![](D:\优先级.jpg)
## OI历史及规则
### 各项赛事
1. `NOI` 全国青少年信息学奥林匹克竞赛,从 $1984$ 年开始至今
2. `NOIP` 全国青少年信息学奥林匹克联赛,从 $1995$ 年到 $2018$ 年~~(NOIP已死)~~
3. `CSP认证` 从 $2014$ 年开始
4. `CSP-J/S` 非专业级别的能力认证,从 $2019$ 年开始
5. `APIO` 亚洲与太平洋地区信息学奥赛,从 $2007$ 年开始,第一届在澳大利亚举行
6. `IOI` 国际信息学奥林匹克竞赛,从 $1989$ 年在保加利亚开始。中国承办 `IOI` $2000$
### 联赛规则
不用说了,自己访问 www.noi.cn 去看吧!
## 计算机基础知识
### 发展史
1. $1946$ 年 $2$ 月,在美国宾夕法尼亚大学诞生了世界上第一台电子计算机`ENIAC`,这台计算机占地 $170$ 平方米,重 $30$ 吨,用了 $18000$ 多个电子管,每秒能进行 $5000$ 次加法运算。
2. 计算机的 $4$ 个发展过程:
>$1.$ 电子管 $1946 - 1958$
>
>$2.$ 晶体管 $1959-1964$
>
>$3.$ 集成电路 $1965-1970$
>
>$4.$ 大规模,超大规模集成电路 $1971 - Now$
3. 冯·诺依曼(美籍匈牙利数学家)思想:计算机由存储器,控制器,运算器,输入设备,输出设备 $5$ 部分组成。
4. 图灵:英国数学家,$1912-1954$
### 系统的基本结构和常识
![](D:\结构.jpg)
2. CPU(中央处理器)的主要指标为主频和字长。
3. CPU是微机的核心部件,是决定微机性能的关键部件。$20$ 世纪 $70$ 年代微型机的CPU问世,微型计算机的核心部件微处理器从`Intel 4004`,`80286`,`80386`,`80486` 发展到 `Pentium II/III` 和 `Pentium 4`,数位从$4$ 位、$8$ 位、$16$ 位、$32$ 位发展到 $64$ 位,主频从几 $MHZ$ 到今天的数 $GHZ$ 以上($1GHZ=1000MHZ$),CPU芯片里集成的晶体管数由 $2$ 万个跃升到 $1000$ 万个以上。
4. 世界上第一个CPU:`Inter 4004`。
5. 进制转换:$1TB=1024GB=1024^2MB=1024^3KB=1024^4B$
6. 各种存储器读取速度比较:`Cache` $>$ `RAM` $>$ `ROM` $>$ 外存 **离CPU越近,速度越快**
7. 总线结构可分为:数据,地址,控制总线。
8. 计算机的软件:
![](D:\软件.png)
9. 计算机的语言:机器语言,汇编语言,高级语言
10. 在高级语言中,编译性语言有 `C/C++`、`Pascal/Object Pascal(Delphi)`等;解释性语言有 `ASP`、`php`、`Java`、`javascript`、`VBScript`、`Perl`、`Python`、`Ruby` 等。
### 信息编码
1. 字节是存储器系统的最小存取单位。
2. 英文编码:$ASCII$ 码。$ASCII$ 编码是由美国国家标准委员会制定的一种包括数字、字母、通用符号和控制符号在内的字符编码集,全称叫美国国家信息交换标准代码(American Standard Code for Information Interchange)。
![](D:\ASCII 码.png)
3. 汉字编码:国家标准 $GB2312$:包括了 $6763$ 个汉字。
### 原码,反码,补码
1. 原码:原码就是符号位加上真值的绝对值,即用第一位($+ = 0,-=1$)表示符号,其余位表示值。
>$+1 = 0000 0001, -1=1000 0001$
2. 反码:正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
>$+1 = [0000 0001]_原 = [0000 0001]_反$
>
>$-1 = [1000 0001]_原 = [1111 1110]_反$
3. 正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后 $+1$。(即在反码的基础上 $+1$)
>$+1 = [0000 0001]_原 = [0000 0001]_反 = [0000 0001]_补$
>
>$-1 = [1000 0001]_原 = [1111 1110]_反 = [1111 1111]_补$
# CSP-S 初赛阅读程序与程序填空
## 阅读程序与程序填空
### 常考算法
>约瑟夫环、幻方、求逆序对、归并排序相关操作、求逆序对、快速幂、组合数学、杨辉三角、二进制、搜索(遍历)、$\gcd$ 、$ex\gcd$、最长上升子序列、最长公共子序列、最长公共上升子序列、康拓展开……
其实主要还是以做题为主(模板题)。
![1570240379986](C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1570240379986.png)
推荐书籍:《算法竞赛进阶指南》
推荐网站:[牛客网](https://ac.nowcoder.com/acm/skill/noip-tg)
以上是关于CSP-S 初赛问题求解与选择题的主要内容,如果未能解决你的问题,请参考以下文章