CSP 初赛要点复习

位运算

逻辑与、按位与之类的东西是不同的!“逻辑”的是判断两个数都不为 \(0\),“按位”的是判断两个数的每一个二进制位与的结果,是不同的。其他运算也类似。

运算符优先级如图所示:

image

注意,~ 和 ! 是同级的。

加法位运算表示:a+b=(a^b)+((a&b)<<1)

与的符号开口向下,和交集的符号 \(∩\) 的方向相同。或的开口向上,和并集的符号 \(∪\) 的方向相同。非是一个横线加一个直角:\(\lnot\)

逻辑运算符优先级:非、与、或。(没有异或)

编码

原码:第一位符号位,其他位正常表示数字。正数第一位 \(0\),负数第一位为 \(0\)\(0\) 的原码有两种(即第一位为 \(1\)\(0\) 都可以)。比如:\(10\to00001010,-10\to 10001010\)

反码:正数时就是原码,负数时将其原码的符号位不变,其他位全部取反。\(0\) 的反码有两种,全 \(0\) 和全 \(1\)。比如:\(2\to 00000010,-2 \to 11111101\)

补码:正数的补码就是其原码,负数的补码等于其反码加 \(1\)\(0\) 的补码只有 \(1\) 个:全 \(0\)。比如:\(1 \to 00000001,-1 \to 11111111\)

浮点数编码:阶码和尾数。阶码:小数点的位置,尾数:小数的有效位数。

表示范围:

  • 原码、反码:\([-2^{31}+1,2^{31}-1]\),因为 \(0\) 占了两个编码。
  • 补码:\([-2^{31},2^{31}-1]\),因为 \(0\) 多的一个编码给了负数。

无符号整型的范围是 \([0,2^{32}-1]\)

注意:最高位产生进位不一定意味着运算溢出。

进制

十进制转 \(K\) 进制:短除法,记录下每次短除的余数。结果最终要倒过来。

十进制小数部分转 \(K\) 进制小数部分处理方法:每次将小数部分乘 \(K\),记录下每次整数部分是啥,然后再砍掉整数部分继续进行,直到小数部分为 \(0\)。结果最终不用倒过来。如果是循环小数,就算到需要的精度就停下。

\(2^i\) 进制之间可以通过每 \(i\) 位合并一次的方式快速转化。

十六进制 H,十进制 D,八进制 O,二进制 B。

代码中,十六进制 0x...,十进制 ...,八进制 0...,二进制 0b...

未知进制的做题技巧,设 \(x\) 进制,然后用 \(k \times x^i\) 表示各位数。

计算机软件系统

自求多福吧。

常用文件扩展名:

  • 文本:.pdf , .doc , .txt , .md , .docx
  • 图片:.jpg , .png , .gif
  • 音频:.wav , .mp3 , .ogg
  • 视频:.avi , .wmv , .mp4
  • 程序:.exe

注意:Linux 下程序默认没有扩展名!!!

代表性系统软件分类:

  • 操作系统,很大程度上决定了计算机系统的性能。
  • 语言处理程序
  • 数据库管理系统

常用操作系统:

  • Windows
  • Windows XP
  • MacOs
  • Linux
  • Unix
  • NOI Linux
  • DOS
  • iOS
  • Android
  • Solaris

操作系统作用:控制和管理系统资源。

P2P:对等网络。
QQ、MSN、微信:即时通信软件。
BIOS:Basic Input Output System,基本输入输出系统。

计算机语言

低级语言:依赖硬件,可读性差,可移植性差。

  • 机器语言,用二进制表示的代码。灵活、直接执行、速度快。
  • 汇编语言,有简单的字母、单词的代码。应用于底层。

高级语言:可移植性好。

  • 面向过程:自顶向下、逐步求精的模块化思想。如 C,Pascal,Fortran,Basic。
  • 面向对象:把事物抽象成类,把实例化为对象。如 C++,C#,Java,Python,Javascript。

第一个高级语言:Fortran。
第一个面向对象的语言:Smalltalk。面向对象的设计雏形来自 Simula。

高级语言的翻译过程:

  • 编译型语言:直接转化为机器语言,效率高,依赖编译器,跨平台性差。如 C++,C,Pascal。
  • 解释型语言:执行一句翻译一句,不需要编译器,效率低,不产生目标文件。如 Python,Javescript,Java,C#。

信息编码

1Byte(字节)=8bit(比特),1Byte=1B,1bit=1b。
1KB(千字节)=1024Byte
1MB(兆字节)=1024KB
1GB(千兆字节)=1024MB
1TB(太字节)=1024GB
1PB(拍字节)=1024TB

如果要区别 Mib 与 Mb 之类的东西,Mib 为 1024 进 1 位,Mb 为 1000 进 1 位。不区别的话默认我们描述的 1Mb 之类的是 1024 进 1 位。

英文字符用 ASCII 码,用 \(7\) 位二进制数表示,共 \(128\) 个元素。多余的最高位取 \(0\)。占 \(1\) 个字节。

汉字用 \(2\) 个字节表示,类别:

  • 区位码,我国汉字交换统一标准。有区号、位号。
  • 国标码,也叫交换码,等于十六进制的区位码加 2020H。
  • 机内码,计算机内部识别汉字的编码,最高位是 \(1\),与 ASCII 区别开了。

字形码:显示汉字时计算机用的字模。是 \(n \times n\) 的点阵。

图像数据数字化过程:

  • 采样,扫描线划分成 \(M \times N\) 的格子。
  • 量化:把像素值离散化为整数值。离散取值的个数叫做量化级数,表示量化的亮度值所需的二进制位数叫量化字长。量化字长越长,就越能反应图像的原有效果。
  • 编码:把离散的像素矩阵编制成二进制编码组。

颜色深度=图片的位数。

一个 \(M \times N\) 像素的 \(D(位)\) 位图片,大小为 \(\frac{M \times N \times D}{8} Byte\)

如果是视频,假设每秒帧数为 \(S(帧)\),拍了 \(T(s)\) 秒的视频,那么大小就是:\(\frac{M \times N \times D \times S \times T}{8} Byte\)

声音数据数字化过程:

  • 采样:将连续的数字信号,每隔一段时间抽出一个信号,让他成为时间上离散的脉冲序列。
  • 量化:将离散的信号幅度用二进制数表示出来。每个采样点能表示的二进制位数叫做采样位数(量化位数),反映了声音的精度。
  • 编码:把信号转化为数字编码脉冲。

设音频的采样频率为 \(P(Hz)\),采样位数为 \(D(位)\),声道数为 \(N(个)\),时间为 \(T(s)\)
那么数据率 \(S=\frac{P\times D \times N}{8}Byte\)
数据量 \(K=S\times T=\frac{P\times D \times N \times T}{8}Byte\)

哈夫曼编码:每次选定两个权值最小的 node 合并,这两个 node 指向合并之后的 node,一个 node 边赋 \(0\),另一个赋 \(1\)。最后建出一棵树。哈夫曼编码不唯一,但必须满足以下条件:

  • 任何编码都不为其他编码的前缀
  • 编码最短

编码最短,是指我们自己建出来的树算出来的各字母编码长度等于他给的长度,就算满足要求。

Unicode 码,也叫万国码,是世界统一的二进制编码方式。UTF-8 最常用。

计算机储存的基本单位是 Byte,最小单位是 bit。

时间复杂度

一些常见算法复杂度需要注意:

  • AVL 树(替罪羊树)删除是严格 \(O(\log n)\) 的,FHQ Treap、Splay 等平衡树都不是严格的。
  • 只路径压缩或只按秩合并的并查集是 \(O(n\log n)\) 的,只有两个优化同时加才是 \(O(n\alpha)\) 的。
  • ACAM 的时间复杂度是 \(O(n|\sum|)\)
  • 并查集随机合并,单次查询 / 合并的期望复杂度为 \(O(\log n)\)
  • ST 表求 \(\gcd\),注意 \(\gcd\) 的均摊性质,预处理时间复杂度 \(O(n\log n)\),查询复杂度 \(O(\log V)\)
  • 堆优化 Dijkstra 的复杂度是 \(O(m\log m)\),朴素 Dijkstra 复杂度是 \(O(n^2)\)。堆优化在稠密图 / 完全图上不一定比朴素的更优。

主定理 Master Theorem:

  • 形式:\(T(n) = aT(\frac{n}{b}) + n^d\)
  • 时间复杂度:
    • \(\log_ba > d\),则 \(T(n) = O(n^{\log_ba})\)
    • \(\log_ba = d\),则 \(T(n) = O(n^d\log n)\)
    • \(\log_ba < d\),则 \(T(n) = O(n^d)\)
  • 特例:把 \(n^d\) 换成 \(f(n)\) 后,设 \(f(n) = O(n^{\log_ba}\log^k n)\)。若 \(k\ge 1\),则有 \(T(n) = O(n^{\log_ba} \log^{k+1}n)\)。是上述第二种情况的特例。

P / NP / NPC / NP-Hard:

  • 多项式复杂度:\(n\) 出现在时间复杂度底数位置。
  • 非多项式复杂度:如 \(O(x^n),O(n!)\),一般计算机不能承受,\(n\) 出现在指数等位置。
  • P:可以在多项式复杂度内解决的问题。
  • NP:不能在多项式复杂度内解决的问题。
  • NP-Complete:是 NP,且其余 NP 问题均能规约到该问题。
  • NP-Hard:本身不一定是 NP 问题,但其余 NP 问题均能规约到该问题。

图论

  • 欧拉图
    • 欧拉路径:恰好经过图中每条边一次的路径,可以经过重复的点。
    • 欧拉回路:首尾相同的欧拉路径。
    • 半欧拉图:只存在欧拉路径的图。
    • 欧拉图:只存在欧拉回路的图。
  • 哈密顿图
    • 哈密顿通路:恰好经过图上每个点一次的路径。
    • 哈密顿回路:首尾之间有边存在的哈密顿通路。
    • 半哈密顿图:只存在哈密顿通路的图。
    • 哈密顿图:只存在哈密顿回路的图。
  • 竞赛图:给无向完全图的每条边定向,形成的图。

Linux 操作

  • 改文件名:mv <old> <new>
  • 返回上一级目录:cd..
  • 删除当前目录下 test 目录:rm -r test
  • 执行文件:./a.out
  • 杀掉名为 test 的后台进程:killall test
  • 杀掉失去响应的进程:kill $pid
  • 查看隐藏文件:ls -a
  • 将当前目录下的文件名打印进 tmp 文件:ls > tmp
  • 查看文件大小:ls -l
  • 测运行时间:time ./a.out
  • 从虚拟终端切换回桌面环境:Alt + F2
  • NOI Linux 默认的 Shell:bash
  • 查看当前系统进程 / CPU 利用率:ps
  • a 创建一个备份 bcp a b
  • 终止程序运行:Ctrl + C
  • a.in 作为 a.out 的输入文件:./a.out < a.in
  • a.ans 作为 a.out 的输入文件:./a.out > a.ans
  • Linux 的换行符:\n
  • 可执行文件后缀:.sh
  • 查看当前路径:pwd
  • 在当前目录下建立目录:mkdir

NOI 基础知识

  • 首届 NOI 举办时间:1984
  • 第 12 届 IOI 于 2000 年在北京举办。
  • NOI2025 是第 42 届 NOI。
  • IOI2025 是第 37 届 IOI。
  • NOI 全称:全国青少年信息学奥林匹克竞赛
posted @ 2024-09-16 15:48  KS_Fszha  阅读(106)  评论(0)    收藏  举报