CSP初赛复习

初赛复习

初赛一定要过啊,否则付出的那么多都白搭了!

while(1)
    ++csp.rp,++csp.luck,++csp.scores;

历史

  • 2020年开始,除NOIP以外的NOI系列其他赛事(包括冬令营、CTSC、APIO、NOI)将不再支持Pascal语言和C语言。从2022年开始,NOIP竞赛也将不再支持Pascal语言。

  • 图灵奖 (A.M. Turing Award) 由ACM于1966年设立 ,“计算机界的诺贝尔奖”
    奖励那些对计算机事业做出重要贡献的个人

    约翰•冯•诺依曼奖 由IEEE(电气和电子工程师协会)于1990年成立
    表扬在计算机科学和技术上具有杰出成就的科学家

    高德纳奖 (Donald E. Knuth Prize) 始于1996 1.5年颁发一次
    授予为计算机科学基础做出杰出贡献的人

    王选奖 CCF
    授予在计算机科学技术前沿取得重要突破,研究成果通过转化和产业化,创造显著经济或社会效益的科技工作者

  • 第一台计算机 ENIACENIAC是继ABC(阿塔纳索夫-贝瑞计算机)之后的第二台电子计算机和第一台通用计算机)

    第一台具有存储程序功能的计算机 EDVAC(离散变量自动电子计算机)

  • NOI 1984年
    NOIP 1995年
    冬令营 1995年
    APIO 2007年

计算机原理结构

  • 首位0、1分别表示正、负,正数的反码是它本身,负数的反码是它原码除符号位外按位取反;正数的补码是它本身,负数的补码是它的反码+1

  • CPU(中央处理器)=运算器+控制器+寄存器(速度最快)

  • BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

  • ROM只读存储器;RAM随机存储器(约为内存)

  • cache是高速缓冲存储器,快于RAM (速度:寄存器>cache>RAM>ROM)

  • 随机存储器RAM的“随机”指“随时访问”

  • 断电后可以保存数据:硬盘,ROM;断电后不可以保存数据:显存(显卡内存),RAM,CPU

  • 电子管-晶体管-中小规模集成-大超大规模集成

  • LAN 局域网;MAN 城域网;WAN 广域网

  • IMAP、POP3、SMTP 电子邮件

  • TCP/IP 链路层-网络层-传输层-应用层

  • GSM全球移动通信系统;GPRS通用分组无线服务技术;

  • OSI七层模型1-7(低到高)

    1.物理层 2.数据链路层:ppp点对点协议 CSMA/CD 3.网络层:IP协议,地址解析协议ARP,网际控制报文协议ICMP,路由选择协议,RIP 4.运输层:用户数据报协议UDP,传输控制协议TCP 5.会话层 6表示层 7.应用层:文件传输协议FTP,HTTP,SMTP

  • 1TB=1024GB,1GB=1024MB,1MB=1024KB,1KB=1024B,**1B(字节)=8bit(位), 1 个像素=2B,\(1GB=2^{10+10+10}=2^{30}\)

算法

  • O(1),O(N),O(NlogN),O(n2)等n不在指数为的复杂度为多项式级复杂度,O(N!),O(2n)等复杂度是非多项式级的,可以找到一个多项式级复杂度算法的问题是P问题;一个解可以用多项式级复杂度检验的问题是NP问题

  • 逻辑运算律(同集合运算律):\((A\and C)\or (B\and C)=C\and (A\and B)\)

  • 位运算优先级:& ^ |

  • 指针最优,单目运算优于双目运算(如正负号),先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7.逻辑运算最后结合。

  • 一个问题满足以下两条,它就是NPC问题:1、它是NP问题,2、所有的NP问题都可以约化到它

  • 主定理复习:若存在\(k\ge0\),有\(f(n)=\Theta(n^{log_ba}log_2^kn)\),则\(T(n)=\Theta(n^{log_ba}log_2^{k+1}n)\)

  • 如果操作符在操作数前面,则称为前缀表达式,从后往前用栈阅读

  • 十转二:整数部分:不断除以2,直到商为0,倒取各阶段余数;

    小数部分:不断乘以2,直到积为1,正取各阶段整数

    如10.25转化为二进制

    10÷2=5……0

    5÷2=2……1

    2÷2=1……0

    1÷2=0……1

    倒着取余数,1010即为整数部分

    0.25*2=0.5……0

    0.5*2=1……1

    正着取整数,0.01即为小数部分

    将两部分合起来,得到10.25=(1010.01)2

    十转八:计算小数部分时,小数部分每次乘八提取整数,正取各整数

  • char: 1字节(8位)
    int: 4字节 (32位,取值范围 \(-2^31 ~ 2^31-1\))
    unsigned int : 4字节 (32位,取值范围$ 0 ~ 2^{32}-1$)
    long: 4字节 (32位,取值范围 \(-2^{31} ~ 2^{31}-1\))
    unsigned long : 4字节 (32位,取值范围 \(0 ~ 2^{32}-1\))
    long long : 8字节(64位,取值范围 \(-2^{63} ~ 2^{63}-1\))

  • 点双连通:某个没有割点的无向图

    边双连通:某个没有割边(桥)的无向图

    双连通分量:图的极大双连通子图(分为点双连通分量和边双联通分量)

  • 哈夫曼树的叶子节点个数比非叶子节点个数多一

  • 先序遍历:根-左-右

  • 欧拉图:可以一笔画出来的

    一个图是欧拉图的充要条件(无向图):度为奇数点的点的个数<=2

    有向连通图 D 是欧拉图,当且仅当该图为连通图且 D 中每个结点的入度=出度

    欧拉环游:通过图中每边恰好一次的闭路径

    欧拉闭迹:通过图中每边恰好一次的路径

  • 排序方法 时间复杂度 空间复杂度 稳定性
    快速排序 一般\(O(nlogn)\),最坏情况下\(O(n^2)\) \(O(logn)\) 不稳定
    shell 排序(希尔排序) \(O(n^2)\) \(O(1)\) 不稳定
    堆排序 \(O(nlogn)\) \(O(1)\)(直接在原序列上建立堆) 不稳定
    选择排序 \(O(n2)\) \(O(n)\) 不稳定
    归并排序 \(O(nlogn)\) \(O(n)\) 稳定
    基数排序 \(O(n)\) \(O(n)\) 稳定
    插入排序 \(O(n^2)\) \(O(n)\) 稳定
    冒泡排序 \(O(n^2)\) \(O(1)\) 稳定

数学

排列组合

\(P_n^k\)\(n\)中选\(k\)个有多少种排列,\(P_n^k=n\times(n-1)\times\dots\times(n-k+1)=\frac{n!}{(n-k)!}\)

\(C_n^k\)\(n\)中选\(k\)个有多少种组合,\(C_n^k=\frac{P_n^k}{k!}=\frac{n!}{(n-k)!k!}\)

捆绑插空分组法

例1 由数字1、2、3、4、5、6、7组成无重复数字的七位数。

(1)求三个偶数必相邻的七位数的个数;(2)求三个偶数互不相邻的七位数的个数。

解 (1):因为三个偶数2、4、6必须相邻,所以要得到一个符合条件的七位数可以分为如下三步:第一步将1、3、5、7四个数字排好有P(4,4)种不同的排法;第二步将2、4、6三个数字“捆绑”在一起有P(3,3) 种不同的“捆绑”方法; 第三步将第二步“捆绑”的这个整体“插入”到第一步所排的四个不同数字的五个“间隙”(包括两端的两个位置)中的其中一个位置上,有P(1,5)种不同的“插入”方法。根据乘法原理共有\(P(4,4)\times P(3,3)\times P(5,1)\)=720种不同的排法。所以共有720个符合条件的七位数。

解(2):因为三个偶数2、4、6 互不相邻,所以要得到符合条件的七位数可以分为如下两步:第一步将1、3、5、7四个数字排好,有P(4,4) 种不同的排法;第二步将2、4、6分别“插入”到第一步排的四个数字的五个“间隙”(包括两端的两个位置)中的三个位置上,有P(3,5) 种“插入”方法。根据乘法原理共有\(P(4,4)\times P(3,5)=1440\)种不同的排法。所以共有1440个符合条件的七位数。

例2 将A、B、C、D、E、F分成三组,共有多少种不同的分法?

解:要将A、B、C、D、E、F分成三组,可以分为三类办法:(1-1-4)分法、(1-2-3)分法、(2-2-2)分法。下面分别计算每一类的方法数:

第一类(1-1-4)分法,这是一类整体不等分局部等分的问题,可以采用两种解法。解法一:从六个元素中取出四个不同的元素构成一个组,余下的两个元素各作为一个组,有C(4,6)种不同的分法。解法二:从六个元素中先取出一个元素作为一个组有C(1,6) 种选法,再从余下的五个元素中取出一个元素作为一个组有C(1,5) 种选法,最后余下的四个元素自然作为一个组,由于第一步和第二步各选取出一个元素分别作为一个组有先后之分,产生了重复计算,应除以P(2,2)。所以共有\(C(1,6)*C(1,5)/P(2,2) =15\)种不同的分组方法。

第二类(1-2-3)分法,这是一类整体和局部均不等分的问题,首先从六个不同的元素中选取出一个元素作为一个组有C(1,6) 种不同的选法,再从余下的五个不同元素中选取出两个不同的元素作为一个组有C(2,5) 种不同的选法,余下的最后三个元素自然作为一个组,根据乘法原理共有\(C(1,6)*C(2,5)=60\)种不同的分组方法。

第三类(2-2-2)分法,这是一类整体“等分”的问题,首先从六个不同元素中选取出两个不同元素作为一个组有C(2,6) 种不同的取法,再从余下的四个元素中取出两个不同的元素作为一个组有C(2,4)种不同的取法,最后余下的两个元素自然作为一个组。由于三组等分存在先后选取的不同的顺序,所以应除以P(3,3) ,因此共有\(C(2,6)*C(2,4)/P(3,3) =15\)种不同的分组方法。

根据加法原理,将A、B、C、D、E、F六个元素分成三组共有:15+60+15=90种不同的方法。

小结:

  • m个不同的元素必须相邻,有P(m,m) 种“捆绑”方法。
  • m个不同元素互不相邻,分别“插入”到n个“间隙”中的m个位置有 P(m,n)种不同的“插入”方法。
  • m个相同的元素互不相邻,分别“插入”到n个“间隙”中的m个位置,有C(m,n)种不同的“插入”方法
  • 若干个不同的元素“等分”为 m个组,要将选取出每一个组的组合数的乘积除以P(m,m)。

Catalan数

(\(1,1,2,5,14,42,132\))

通项公式:\(H(n)=\frac{C_n^{2n}}{n+1}\)

递推公式:\(H(n)=H(n-1)\times \frac{4n-2}{(n+1)}\)

意义:

  • \(n\) 个结点可够造多少个不同的二叉树
  • \(n\)个不同的数依次进栈,求不同的出栈结果的种数
  • 对角线不相交的情况下,将一个凸多边形区域分成三角形区域的方法数
  • 在圆上选择\(2n\)个点,将这些点成对连接起来使得所得到的\(n\)条线段不相交的方法数

容斥定理

被覆盖奇数次的加,偶数次的减

2017年10月1日是星期日,1949年10月1日是( )。

其实我们只关心1949-10-1到2017-10-1在过了多少个一周后又零几天
一年有52周=52*7=364天,所以每过一个平年我们过了52周零1天,每过一个闰年我们过了52周零2天
而中间有(2017-1949)/4=17 个闰年
所以我们除了n个整周外零了(2017-1949)+17=85 天=12周…….1天
多过了1天使周日,所以1949-10-1是周六

将7个名额分给4个不同的班级,允许有的班级没有名额,有( )种不同的分配方案。

因为允许为空,所以我们每组都填上1,然后此时我们可以看作是你面前有7+4=11个球,10个空隙,你需要在十个空隙插入三个板子,把十一个球分成四份,要求每个空隙只能有一个板子,且四组都得有一个球,所以就是 \(C(10, 3) = 120\)

由四个不同的点构成的简单无向连通图的个数是( )

四个点构成连通图最少选3条边(树),最多选\(\frac{4\times3}{2}\)条边(完全图),一共\(\frac{4\times3}{2}\)条边中选择,但注意,不是所有的任选3条边都满足条件,有一种情况是三个点形成一个三角形而孤立一个点,这种情况共有4种,所以\(ans=C(6, 6)+C(6,5)+C(6,4)+C(6,3)-4=38\)

某计算机的 CPU 和内存之间的地址总线宽度是 32 位(bit),这台计算机最多可以使用( )GB的内存。

最多使用\(2^{32}\)字节(B)

有 7 个一模一样的苹果,放到 3 个一样的盘子中,一共有( )种放法

枚举即可,注意用计排序,算组合即可

有数字1,1,2,4,8,8所组成的不同的四位数的个数

显然 1 开头和 8 开头的方案数相等,2 开头和 4 开头的方案数相同,然后我们可以通过手玩爆枚出 1 开头与 2 开头的方案数,分别为 33 与 18,加起来乘二等于 102

哪个逻辑表达式的值与变量 B 的真假无关?

A. (𝐵 ∨ 𝐴) ∧ ┐𝐵

B. (𝐵 ∨ 𝐴) ∧ ┐𝐵 ∧ 𝐴

C. (𝐵 ∧ 𝐴) ∨ ┐𝐵

D. (𝐵 ∧ 𝐴) ∨ (┐𝐵 ∧ 𝐴)

有运算律 (𝐵 ∧ 𝐴) ∨ (┐𝐵 ∧ 𝐴) = (𝐵 ∨ ┐𝐵) ∧ A,所以D选项真假与B真假无关

在 8 位二进制补码中,10101100 表示的数是十进制下的

符号位为1,则为负数,将其他位先减一再取反即可。

在 C 语言中,表达式 23|9^6 的值是

位运算符优先级:& ^ | ,所以为31

原字符串中任意一段连续的字符所组成的新字符串称为子串。则字符“AAAABBBBCCCC”共有( ) 个不同的非空子串

直接按长度枚举 3+5+7+9+8+7+6+5+4+3+2+1 = 60

参考

https://www.cnblogs.com/llllllpppppp/p/9749930.html

https://www.cnblogs.com/ACworker/p/7229238.html

https://blog.csdn.net/eirlys_north/article/details/80664747

posted @ 2019-09-23 13:41  Santiego  阅读(878)  评论(0编辑  收藏  举报