OI 笑传 #10

哎你怎么 10 了。

写点初试的东西。

Linux

一般关于这种的环境都是 NOI linux 2.0,与 windows 环境还是有些不同的。

编译器 :g++

可执行文件:没有特定后缀,不能写 .exe .bat

-o 命令后面要紧跟自定义文件名。

在 linux 上编译一个 cppg++ <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 成员默认 publicclass 成员默认 private

稀疏表:ST 表

散列表:hash 表

强连通图:在有向图中,若对于每一对顶点 \((u,v)\),都存在一条从 \(u\)\(v\) 和从 \(u\)\(v\) 的路径,则称此图是强连通图。

弱连通图:将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则有向图是弱连通图。

左值(在 = 左侧的值)必须是可修改的。

不稳定排序:快希选堆。

自定义比较函数 & 重载运算符:

比较函数一般传入两个参数,比较函数应回答:第一个传入的参数是否在第二个元素之前?

据此判断整个排序的行为。

priority_queue 由于大顶堆,默认会做出相反的行为。

但若是定义时使用 greater<int> 则会做出正常行为。

posted @ 2025-08-28 17:45  hm2ns  阅读(12)  评论(0)    收藏  举报