NOIP初赛_总结
小知识点总结
- d+i=&d[i]
- 图像的的存储计算公式 : 长 _ 宽 _ 深度(位:如 16 位)
长和宽需换算成分辨率(就是像素) 如: 1024*248 注意:真彩色为 32 位
16 位图深度就是十六 - 1Byte (B) = 8bit(位)
- 计算机的一些特殊逻辑运算
基础知识
1. 逻辑运算和二进制运算
- 非: ! ¬
- 与(and): & ∧
- 或(or): | ∨
- 异或(xor): ⊕ ∧ 注意不同与逻辑与
- 按位取反 ~
- << 左移,最右边补 0
- >> 右移,标准没有规定最左边补什么!
实践上,unsigned 直接补 0;signed 复制原先的最高位。
异或运算法则:转换为二进制 看每一位 如有不同取 1 否则取 0
e.g:0101 ∧ 0011 = 0110
2. 真值,原码,反码,补码
- 真值:e.g 10011 和 -111001
- 原码:符号位正为 0,负为 1,其他与真值相同. e.g 010011 和 1111001
- 反码:
- 补码
补码是这样一套体系:
[0,2^31−1]这 2^31 个非负数,直接存储二进制。
[−2^31,−1]这 2^31 个负数,存储其相应正数的加法逆元。
e.g.
7 存储为 000…00111
-7 存储为 111…11001
加法逆元: 𝑥 和 inv(𝑥) 加在一起,变成 0.
初赛数学
多学学高中数学吧。。。不然会死人的!
3. 排列组合
- 往后数下一个排列
1 2 3 的所有排列如下:
123 132 213 312 321
往后数下一个排列就是按字典序的下一个
如 132 的下一个排列为 213 注意 123 前无排列,321 后无排列
e.g 164532往后数10给排列为:1
2
3
4
5
6
7
8
9
10164532
165234
165243
165324
165342
165423
165432
213456
213465
213546
注: 可用STL函数 next_permutation(arr, arr+size); 获取后面的排列
头文件 #include <algorithm>
参数说明:arr: 数组名 size:数组元素个数
详见[学习C++ ]C++ STL 全排列函数详解(排列组合与匹配算法)–1
4. 进制转换
进制只是一种表示并不改变运算规律如果你能背掉七进制的乘法口诀表,呵呵
4.1. 基础
- 其他进制转十进制:乘幂,再加法(通过进制的本质来转换)
- 十进制转其他进制:短除法
- 分数进制转换类比于小数的进制转换
4.2. 技巧
- 二进制与二的次方进制间的转换,如 2->8,2->16,16->2,8->2之类
2->8 :
因为8为2的3次方,所以每三位划分一下,转为8进制后直接拼起来即可
一定要补齐: 如10110.0011补齐为|010|110|.|001|100|
转化为 2 6 . 1 4 (8)
注意整数从右往左,小数从左往右,就是从靠近小数点的一方开始补齐16->2
每一个16进制字符化为4位二进制数即可,例:
3A7.B1 H = |0011|1010|0111|.|1011|0001| B 即 1110100111.10110001
- 无限不循环小数转分数,如:
1 | . . |
将循环节 142857 截取,应为 142857 有六位,就用 142857/999999,约分得到 1/7
即 0.142827142857…… 可表示为 1/7
5. 前缀、中缀、后缀表达式 & 表达式树
6. 树和图的性质
7. 复杂度分析
8. 组合数学
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 边缘坐标のWasteland!
评论