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 初赛问题求解与选择题的主要内容,如果未能解决你的问题,请参考以下文章

noip初赛问题求解的方法

NOIP2016提高组初赛

CSP-S初赛

2017 10 14(吐槽初赛)

第十七届全国青少年信息学奥林匹克联赛初赛试题 参考答案 (悬赏100。。。)

2019 CSP-S初赛游记