OI 笑传 #10
哎你怎么 10 了。
写点初试的东西。
Linux
一般关于这种的环境都是 NOI linux 2.0,与 windows 环境还是有些不同的。
编译器 :g++
可执行文件:没有特定后缀,不能写 .exe .bat
-o 命令后面要紧跟自定义文件名。
在 linux 上编译一个 cpp:g++ <srcname>.cpp -o <customname> 或者是 g++ -o <customname> <srcname>.cpp
其它的各种附加命令随便放。
NOI linux 上只有 -std=c++14,-std=c++17 不行,-std=c++11 也不行。
g++ -o <customname> -g -Wall -std=c++14 <srcname>.cpp g++ -o <customname> -g <srcname>.cpp -Wall -std=c++14 都行的。
Linux 使用 Bash shell,类比 windows powershell。
权限最高的用户 root
强制重启:坏文件系统。
关闭系统 init 0,重启 init 6
看进程,看 CPU(类似任务管理器):ps
换目录:cd,改名 mv,看目录 ls (不是 dir),看隐藏文件 ls -a,删单个文件 rm <filename> 删文件夹 rm -r <foldername>
看工作目录 pwd,找文件 find <dir> <filename>,查空间 df -h
新建单个文件 touch,也可以用 cat > <filename>,看文件 cat <filename>,追加文本 cat >> <filename>
分着页看文件:more <filename>,用 vim 打开文件 vi <filename>
复制文件 cp <filename> <foldername>,复制文件夹 cp -r <filename> <foldername>
位运算与关于负数的位运算
Fow: https://www.cnblogs.com/CoutCodes/p/12557649.html
要注意的是上手计算前要看准变量类型,不同类型的位数不一样。容易体现在左右移的结果不一样。
- 1 字节 = 8 位。
- bool 类型的长度通常是1 字节,但实际上只使用 1 位。
- char 1 字节。
- short 2 字节。
- int 4 字节。
- long 4 字节,具体取决于编译器和操作系统。
- long long 8 字节。
- float 4 字节。
- double 8 字节。
- long double 16 字节,具体取决于编译器和操作系统。
- 指针
*8 字节(x64),具体取决于编译器和操作系统。
不论何时,~x 和 !x 的意义都是不同的。
对负数取模
从除法剩余的角度看模数。
首先同号的两个整数之间除法一定是正整数,这时候余就是唯一的,直接算即可。
例子: \(-7 \bmod -3 =1\)
如果异号,此时可以选择让商为较大的或较小的,对应会有两种不同的余。
例子:\(7 \div (-3)\),\(7 = (-3) \times (-2)+1\) 或 \(7 = (-3) \times (-3) -2\)。余分别为 \(1\)、\(-2\)。
例子2:\(-7 \div 3\),\(-7 = 3\times(-3) + 2\) 或 \(-7 = 3 \times (-2) -1\),余分别为 \(1\)、\(-2\)。
这是个 UB,不同语言的方式不同:
对于异号的两个整数,C++/Java语言的原则是使商尽可能大,很多新型语言和网页计算器的原则是使商尽可能小。
因此 C++ 会取 \(1\) 作为答案。
Fow:
https://www.zhihu.com/question/31344913
https://zh.wikipedia.org/wiki/模除
小点
Dijkstra 算法最坏时间复杂度:\(O(n^2)\)。
堆优化的 Dijkstra 算法最坏时间复杂度:\(O(n\log n)\)。
struct 成员默认 public,class 成员默认 private。
稀疏表:ST 表
散列表:hash 表
强连通图:在有向图中,若对于每一对顶点 \((u,v)\),都存在一条从 \(u\) 到 \(v\) 和从 \(u\) 到 \(v\) 的路径,则称此图是强连通图。
弱连通图:将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是弱连通图。
左值(在 = 左侧的值)必须是可修改的。
不稳定排序:快希选堆。
自定义比较函数 & 重载运算符:
比较函数一般传入两个参数,比较函数应回答:第一个传入的参数是否在第二个元素之前?
据此判断整个排序的行为。
priority_queue 由于大顶堆,默认会做出相反的行为。
但若是定义时使用 greater<int> 则会做出正常行为。

浙公网安备 33010602011771号