CSP-S 初赛问题求解与选择题

# CSP-S 初赛问题求解与选择题

## 时间复杂度计算

公式:对于 $T(n) = a \times T(\dfrac{n}{b})+O(n^d)$ 这个递推式,其时间复杂度为:
$$
T(n) =
\begin{cases}
O(n^{\log_b a}) , \ a > b^d \\
\\
O(n^d \lg n) , \ a = b^d \\
\\
O(n^d) , \ a<b^d
\end{cases}
$$

## 鸽巢原理

### 基本定义

若有 $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{\sqrt{2}}{2}$ 。

![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) = \dfrac{n!}{(n-m)!}$

$C_n^m = \dfrac{A_n^m}{A_m^m} = \dfrac{n(n-1)(n-2) \cdots (n-m+1)}{m!} = \dfrac{n!}{m!(n-m)!} $

另外,规定 $C_n^0 = 1$

圆排列(在一个圆里,经旋转后相同算同一种解):$Q_n^r = \dfrac{A_n^r}{r} = \dfrac{n!}{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$ 右边 $= $ $\dfrac{n!}{m!(n-m)!} + \dfrac{n!}{(m-1)!(n+1-m)!} = \dfrac{n!(n-m+1)}{m!(n+1-m)!} + \dfrac{n! \cdot m}{m!(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 = \dfrac{m+1}{n+1} C_{n+1}^{m+1}$

同样,这里也可以用阶乘来证明:

$\because$ 左边 $=$ $\dfrac{n!}{m!(n-m)!} $

$\because$ 右边 $=$ $\dfrac{m+1}{n+1} \cdot \dfrac{(n+1)!}{(m+1)!(n+1-m-1)!} = \dfrac{m+1}{n+1} \cdot \dfrac{(n+1)!}{(m+1)!(n-m)!} = \dfrac{m+1}{n+1} \cdot \dfrac{n! (n+1)}{m!(n-m)!(m+1)} = \dfrac{n!}{m!(n-m)!}$

$\therefore$ 左边 $=$ 右边

$\therefore$ $C_n^m = \dfrac{m+1}{n+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-1}b^1 + \cdots + C_n^ka^{n-k}b^k + \cdots +C_n^nb^n (n \in N^*)
$$

3. 二项式定理通项:
$$
\large T_{k+1} = C_n^ka^{n-k}b^k
$$

4. 二项式系数之和:

令 $(a+b)^n = C_n^0a^n + C_n^1a^{n-1}b^1 + \cdots + C_n^ka^{n-k}b^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$,展开后只要关注$\dfrac{n}{2}$ 的值。如果 $\dfrac{n}{2}$ 的值是整数,那么二项式系数的最大值就是 $C_n^{\frac{n}{2}}$ ;反之,如果 $\dfrac{n}{2}$ 是小数,那么二项式系数的最大值就是 $C_n^{[\frac{n}{2}]} , C_n^{[\frac{n}{2}]+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)

路径条数即为:$\dbinom{n}{2n} - \dbinom{n-1}{2n} = \dfrac{1}{n+1} \dbinom{n}{2n}$

卡特兰数通式即为:$C_n = \dbinom{n}{2n} - \dbinom{n-1}{2n} = \dfrac{1}{n+1} \dbinom{n}{2n}$

卡特兰数的递推公式 $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 = \dfrac{C_{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)

原文地址:https://www.cnblogs.com/Believe-R/p/11624317.html

时间: 2024-07-31 21:45:39

CSP-S 初赛问题求解与选择题的相关文章

信息学奥林匹克竞赛-初赛抱佛脚攻略(选择题)

庞统友情提示:以下这些内容是我挑选了N久,最简练最简练了,不能再删更多! 1. 一个完整的计算机系统应包括硬件系统和软件系统. 2. 目前微型计算机中采用的逻辑组件是大规模和超大规模集成电路. 3. 软件与程序的区别是 软件是程序以及开发.使用和维护所需要的所有文档的总称,而程序是软件的一部分. 4. IT 表示信息技术. 5. 计算机中央处理器简称为 CPU. 6. 计算机内存储器(其实就是内存)的作用是用来存放当前 CPU 正在使用的程序和数据. 7. 用来全面管理计算机硬件和软件资源的软件

NOIP2010初赛部分选择题填空题解析

4.Linux下可执行文件的默认扩展名是(  d  ). A. exe        B. com       C. dll      D. 以上都不是 嘛,没有什么默认扩展名,是看可执行权限的. 5.如果在某个进制下等式7*7=41成立,那么在该进制下等式12*12=(     )也成立. A. 100        B. 144       C. 164      D. 196 首先7*7=49,比41大则应该是高进制,推算一下可以得到进制为12,所以12*12相当于这个进制下的10,答案就

CSP 初赛复习

计算机基础知识专项训练 错题 计算机发展历史 下列属于信息处理的是(). A.信息加工 B.信息分类 C.信息存储 D.信息采集 答案: \(ABCD\) 解析:信息处理的含义 (指信息的收集. 分析. 筛选. 加工. 整理.计算.表达和交流. 计算机病毒传染的必要条件是(). A.在内存中运行病毒程序 B.对磁盘进行读写操作 C.在内存中运行含有病毒的可执行程序. D.运行游戏软件 答案:\(B\) 下面有关计算机知识说明,正确的是(). A.在Windows操作系统下,删除磁盘中的文件时都先

Noip2008提高组初赛 C

第十四届(NOIP2008)信息学奥赛联赛提高组C语言初赛试题 ● ●  全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效  ●● 一. 单项选择题 (共10题,每题1.5分,共计15分.每题有且仅有一个正确答案). 1. 在以下各项中,(C  )不是操作系统软件. A. Solaris   B. Linux    C. Sybase     D. Windows Vista      E. Symbian A:索拉瑞斯是Sun Microsystems研发的计算机操作系统.它被认为是UNI

noip2010普及组初赛

第十六届全国青少年信息学奥林匹克联赛初赛试题 ( 普及组 Pascal 语言 两小时完成) ●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●● 一. 单项选择题(共20题,每题1.5分,共计30分.每题有且仅有一个正确答案.) 1.2E+03表示(   ).A.2.03              B.5                 C.8                 D.2000 2.一个字节(byte)由(  )个二进制位组成.A.8                 B.

Noip初赛整理

分辨率为 1600x900. 16 位色的位图,存储图像信息所需的空间为? A. 2812.5KB B. 4218.75KB C. 4320KB D. 2880KB A 1 kb = 1024 byte 16/2 = 8 byte 正数的反码是其本身 负数是除了符号位之外依次取反 正数的补码是本身 负数的补码 是 反码加1 只要考到了一般都是负数,因为正数就是一个进制转换没啥好考的... 存储器,运算器,控制器,输入输出设备 主机由cpu和内存ram组成 rom只读不可写入,貌似存了些底层操作

NOIP2013-普及组初赛C语言解析

第十九届全国青少年信息学奥林匹克联赛初赛 一.单项选择题(共 20 题,每题 1.5 分,共计 30 分.每题有且仅有一个正确选项)1. 一个 32 位整型变量占用(A )个字节.A. 4 B. 8 C. 32 D. 128 参考:一个int变量占4个字节,对于16字机,short int 占2个字节,在大多数的32位机中,short int 占4个字节.但总的来说,short int 至少16位,也就是2个字节,long int或long ,在内存中占4个字节.故选A /===========

【百度之星2014~初赛(第二轮)解题报告】Chess

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]Chess>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=667 前言 最近要毕业了,有半年没做

动态规划-hdoj-4832-百度之星2014初赛第二场

Chess Problem Description 小度和小良近期又迷上了下棋.棋盘一共同拥有N行M列,我们能够把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,"王"在棋盘上的走法遵循十字路线.也就是说,假设"王"当前在(x,y)点,小度在下一步能够移动到(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+2, y), (x-2, y), (x, y+2), (x, y-2) 这八个点中的随意一个. 小度觉