一般来说,初赛刷人比例是9:10。
但是我们肯定是必须过初赛的。
一般来说,身为专业oier,分数应当在60以上。
我们知道:选择题30分,阅读题40分,填空题30分。然后我的策略是:选择题20+,阅读题30+,填空题15+。只要每个题型都达到这个标准,过初赛应该是没有问题的。
那么我们来看一些选择题常考的考点
借鉴了蓝书和CSP初赛知识点梳理 - 159号程序员 的博客 - 洛谷博客 (luogu.com.cn)
时间复杂度
万年老毒瘤。
比起告诉你她怎么算,我更想告诉你她是什么。
她是函数。
说起她的前世今生,你还需要知道一个叫大T的函数。
我们在写程序时,会用分号将每一个语句隔开。现在,我们将一个语句,也就是一个分号前面的那坨,的复杂度,看做一个单位复杂度。一个程序的复杂度实质上就是这个程序所包含的单位复杂度数量。所以,算大T复杂度,我们要做的就是去数这个程序执行了多少个单位复杂度的语句。
然后这个量呢是会随着你输入的数据而改变的。比如遍历1~n,你输入n=10,他的大T就是10。(或者更严谨地计算,你应该加上for循环的判断语句)那么我们就发现,n是自变量,大T的值是因变量,这就是一个函数了。。
然后我们发现算大T非常的不方便呀,真正严谨的大T甚至很多鸡毛蒜皮的语句也要算进去,更别提那几百行的搜索了。很多时候我们只需要估计这个程序的大致复杂度是多少,于是有了大O。
把大T转换成大O,我们需要省略里面的常数,不管是单独加在外面的还是某一项的系数。很多小伙伴就有疑问,那y=x岂不是和y=100x一样了?其实差不多。常数在复杂度里真的是微乎其微。为什么?因为他不会随着输入的数据而变大。您可以稍微想象一下。
O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n^2)平方阶 < O(n^3)(立方阶) < O(2^n) (指数阶)
然后如果他是多项式的,取最高次项。多个最高次项就加起来。比如。用大T算应该是不存在单项式的,除非hello world。用大O算,算出来还是单项式的(当然最后的结果肯定不会有多项式,这个指的是在取最高次项之前)那么这个问题就被称为NPC。
所以大家已经知道了,算大O乘循环即可。然后如果是那种不是单纯循环不太好算的,我们就设一个n,把她的整个式子写出来,再用我们小学学过的奥数化简得到最终的式子,然后取最高次项。如果你小学没学奥数或者忘了,你就自求多福吧。
位运算
位运算的优先级
非>位移>与>异或>或
这个很简单,相信大家都会。
逻辑运算也差不多就那套,就是稍微注意一下与的尖尖是朝上的,或的是朝下的。
进制之间相互转化,相信大家都已经学过了。如果你忘了你就对不起你小学数学老师,你可以去搜一下短除法。
然后我们一般不太习惯两个非十进制的进制相互转换,所以我们可以用十进制来中转一下。初赛的考场上最不缺的就是时间。
计算机常识
一般来说,oier都不懂计算机。但是这样在外行人看来非常说不过去,尤其是硬件。
冯诺依曼体系:运算器、存储器、输入设备、输出设备。
第一代 | 1946——1958 | 电子管 |
第二代 | 1959——1964 | 晶体管 |
第三代 | 1965——1970 | 集成电路 |
第四代 | 1971——至今 | 大规模集成电路,导致微型计算机问世 |
计算机界常识:
- 图灵奖,ACM设立于1996年,计算机界最高奖项。
- 冯诺依曼奖,由IEEE设立(不是我eee。)
- 中国图灵奖得主:姚期智
- 图灵测试首次通过:2014年6月8日
- 香农:创造了信息论,提出了信息传播所需全部硬件系统。
- 三巨头中,图灵是英国人,冯诺依曼和香农是美国人。
这个不怎么考,说实话。
然后硬件系统
RAM可随时读写,断电后全部数据消失。
ROM只能读出无法写入信息,因此数据是固定的。断电后数据不会消失。
然后再附上一张图。这图不是我的。
来自洛谷159号程序员
然后是非常重要的一定要记的
空间单位换算
bit | 最小的单位 |
Byte | 1 Byte = 1024 bit |
MiB | 1 MiB = 1024 byte |
KiB | 1 KiB = 1024 MiB |
GiB | 1 GiB = 1024 KiB |
TiB | 1 TiB = 1024 GiB |
PiB | 1 PiB = 1024 TiB |
以iB结尾的表示进率为1024。如果以B结尾,则表示进率为1000。必考,注意读题。
ASCII码
数字0是第48号,以此类推。
大写A是第65号,以此类推。
小写a是第97号,以此类推。
机器数与真值
计算机中存在两种整数,无符号整数不考虑正负,有符号的要考虑。
这里有三种码需要大家记住:
- 原码:一个整数表示为符号位+二进制串。正数的符号位是0,负数的是1。
- 反码:对于一个正数,反码就是其原码。对于一个负数,反码是其原码除符号位以外全部取反。
- 补码:对于一个正数,反码就是其原码;对于一个负数,补码是其反码+1。
就是这样。我也不是很明白为什么要这样表示,不过记住就行。
逻辑表达式的右结合性
如果有多个表达式的组合,要从右往左算哦。
<表达式1>?<表达式2>:<表达式3>?<表达式4>:<表达式5>
先看表达式3的真假,如果真返回表达式4的值,否则返回表达式5的值。
然后看表达式1的真假,如果真返回表达式2,否则返回后面那坨的值。
杂项
- 计算机使用低级语言,程序员使用高级语言。编译器把高级语言翻译成低级语言。
- 罕见的视频格式有,avi,mpeg,flv,rmvb,rpm。
排序
你只是一个凡人。你和我一样,只会冒泡和sort。
实际上排序有很多种。你能说出几种?
一般情况 | 最坏情况 | 最好情况 | 空间复杂度 | 稳定性 | |
选择排序 | 不稳定 | ||||
冒泡排序 | 稳定 | ||||
插入排序 | 稳定 | ||||
快速排序 | 不稳定 | ||||
希尔排序 | 不稳定 | ||||
堆排序 | 不稳定 | ||||
归并排序 | 稳定 | ||||
基数排序 | 稳定 |
背一下即可。无非考你稳定性之类的。
排序分为基于比较和不基于比较。基于比较的排序顾名思义,选择冒泡插入这些都是。不基于比较的排序则采用了hash等手段。这类排序不但与数值的多少有关,还与数值的大小范围有关。
如何判断一个排序稳不稳定?如果一个元素与另一个元素相等,一开始一个在另一个之前,排完之后这个还是在那一个之前,则这个排序是稳定的,也就是说他不打乱这个序列的内部顺序。
稳定性的意义?在csp可能涉及到的范围内,毫无意义。但是你可能已经冥冥之中感受到有一些特殊的意义了。如果你真的感受到了,一定要去了解一下,不要浪费了你天才的灵感。
组合计数
得组合计数者得天下。
这个我个人觉得没什么好说的,反正都不会。但是还是说一下吧。
加法原理互不干涉,乘法原理相互之间有关联;
排列数(或P)n取m考虑顺序不同集合数量;
组合数或n取m不考虑顺序不同集合数量;
;
;
组合数除掉了排列数中所考虑的顺序m!;
;
选一些数与选其所剩情况数相同;
;
杨辉三角自行了解;
;
相当于01背包,每个数选或不选,乘法原理;
捆绑法用于要求元素必须相邻;
把这些需要相邻的元素捆绑在一起;
;
插空法用于要求元素不相邻;
先处理可相邻的,再把不可相邻的插到空隙里;
;
插板法用于元素分组每组至少一个元素;
相当于m-1个隔板插到n-1个空隙里;
;
m个元素定序排列,相邻不相邻不受限制用定序;
;
长度为n字符串非空子串数量为;
相当于从n个字符中选择两个作为左右端点;
排列n个0和n个1成为一个长度为2n的序列,任意前缀中0的个数都不少于1的排列数量为;
卡特兰数;
不接触对角线的格路计数最短路问题路线数量为;
大多数情况下你都做不出来;
你就去计数dp观察状态转移方程吧;
实在不行要懂得取舍,千万不要死磕!!!!
(你还有1/4的概率蒙对!)
二叉树
这个真的太重要了。
一个最常考的点就是二叉树的节点数与层数的关系。
一个n层的满二叉树拥有个节点。
这个一定要牢记!牢记!牢记!
然后如何判断他的层数,我们毕竟不太会log。但就像我们不会开根号却依然可以算出一个数平方根的整数部分一样,我们也可以通过同样的手段来计算以2为底的log。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 |
相信大家对这些数据都非常的熟悉。
关于二叉树的遍历
必考。
先序遍历就是dfs序,这个没啥好说的。
容易遗忘的是中序和后序。
- 中序:对于每一棵子树,都最后遍历其右子树。
- 后序:对于每一棵子树,都最后遍历其根节点。
如果你好奇为什么中序和后序会容易遗忘,因为这都是很傻逼很傻逼的遍历。
然后对于一棵二叉树,我们如果知道他的遍历,可以确定他吗?
- 先序+中序可以。
- 中序+后序可以。
- 先序+后序不行。
可以自己去证一下。当然,此时的你肯定不想证。记住就行。
最后,对于一棵二叉树节点,他的左儿子是他编号的两倍,右儿子是左儿子+1。
补充一点扩展知识:n个节点构成的不同二叉树的数量为。其中卡特兰数在组合计数中讲到。
图片/视频存储与屏幕分辨率
分辨率就是像素个数。像素就是有颜色的小块。
色彩位数是一个像素的大小,通常为16bit,24bit,32bit
生活中,色彩位数可以被看做衡量像素颜色丰满程度的标准。位数越多颜色越丰满。就好比你用三块钱买水彩笔,买来红黄绿。而高级的水彩笔里就会出现很多你甚至没有见过的颜色。
图片所占空间的计算公式:
水平方向像素个数×竖直方向像素个数×色彩位数
相当于就是,一个像素有多大,一共有多少个像素,乘起来。
视频是把一些图片连起来。这里就有一个概念,帧数,表示每秒有多少帧,也就是多少张图片。显然,帧数越高,画面越连贯通顺逼真。
视频所占空间的计算公式:
水平方向像素个数×竖直方向像素个数×色彩位数×帧数×时长
也就是说,一张图片有多大,一共有多少张图片,乘起来。
最后记得换算单位。
表达式计算
表达式有前缀、中缀、后缀。这是栈的一大用处。
然而初赛中我们只需要了解即可
- 前缀表达式,即波兰表达式,形如"op A B"。
- 中缀表达式,即我们所普遍使用的表达式,形如"A op B"。
- 后缀表达式,即逆波兰表达式,形如"A B op"。
然后表达式树比较复杂,我不是很想写。不过对于中缀转前后缀,有一种括号法,还算比较浅显。就是先给这个中缀表达式加上括号,然后把符号移到括号前面或者后面,最后删去括号。详情可以自行了解。
OI界的常识
- CFF成立于1962年
- NOIP开办于1995年,截止2018年已举办24次,19年暂停,20年恢复。
图论
图论中有一些小的点。
- n个节点的完全图边数为
- 简单路径:两点之间通过不重复的边相连。
- 连通图:任意两点可直接或间接到达。
- SPFA不属于贪心算法。
再综合二叉树里面讲到的,图论差不多也就这些。
祝大家rp++!