SUの挂分记录
2023.07.28 用了 map 而不是 unordered map TLE。
2023.07.28 m 的输入位置错误。
2023.07.28 for 循环 i <= n 打成 i <= m。
2023.07.28 插入极大值 ±INT_MAX 爆 int,应该插入 ±INT_MAX / 2
2023.07.28 iterator 不进行解码 * 操作
2023.07.28 斜率计算没特判除以 \(0\),RE。
2023.07.28 斜率类型为 double 而不是 long long。
2023.07.30 时限 500 ms 不写 int 快读快写,100 -> 40。
2023.07.31 初赛模拟忘记 Fortran 是面向过程语言(注:Rust 为面向对象语言)。
2023.07.31 to_string 函数将一个正整数转化为一个 string,不是 char 字符数组。
2023.07.31 \(n+n/2+n/4+...=4n\) 时间复杂度 \(O(n)\) 估算成 \(O(n^2)\)。
2023.08.01 完全二叉树无子结点的结点:叶子节点+倒数第二层右边的结点。
2023.08.01 要保证联通,无向图是 \(N-1\) 条边,不是\(\cfrac{n-1}{2}\)
2023.08.03 \(3\) 个学生到 \(2\) 个村劳动,没想到村子不一样,忘记乘 \(2\)。
2023.08.03 \(4\) 男 3 女选 3 男 2 女做五个课代表,忘记了课代表有序,没乘 \(5!\)。
2023.08.03 \(A_2^2\) 算成 \(4\)。
2023.08.03 枚举三个自然数相加的和为小于 10 的偶数情况时有缺漏,因为没有分类枚举。
2023.08.04 高精加法输出忘记倒置(i 从 len 循环到 1)。
2023.08.04 for 循环退出两个可能的地方:for 之后的括号里;循环内部 if 判断,看漏一个。
2023.08.04 二叉搜索树插入元素最坏时间复杂度:\(0+1+2+...+(n-1)=\cfrac{n(n-1)}{2} => O(n^2)\)。
2023.08.04 退出循环和插入元素的顺序看反了,导致答案多了 \(1\)。
2023.08.04 计算数位之和 %9 的结果,没有在循环内取模导致爆 long long,100 -> 30。
2023.08.04 答案忘记取模,骗到的 5 分丢了。
2023.08.04 忘记 \(A⊆B\) 代表 A 是 B 的子集
2023.08.04 快速幂参数没开 long long,100 -> 10。
2023.08.04 i 枚举到 \(\sqrt{n}\) 循环条件写 i * i <= n TLE,100 -> 60。应该写 i <= sqrt(n)。
2023.08.04 埃氏筛循环范围写成 <= n 而不是 <= maxn(正确),100 -> 10。
2023.08.08 用 for 循环计算 \(log(x)\) 时间复杂度不是 \(O(1)\) 而是 \(O(log x)\),时间复杂度有时并不取决于 for 循环的循环次数
2023.08.08 没看清 id 数组记录的是下标不是数字,所以调换顺序会影响结果
2023.08.08 三道模拟题(初赛选择)没耐心做,没有认真模拟
2023.08.08 双指针算法不熟,没注意到右指针向左移动
2023.08.08 没开 long long 导致 RE:floating point exception
2023.08.10 不知道 \(x\ xor\ y = p \rightarrow x\ xor\ p = y\)
2023.08.10 欧拉筛 is_prime 和 prime 搞混,一个是 bool,一个是 int
2023.08.10 题目看不懂时没有举例子帮助理解
2023.08.10 定义质数筛函数却没有在主函数中调用
2023.08.10 字符串转 int 没看到长度最大为 100,\(10^100\) 会爆 int
2023.08.10 程序输出的是函数返回值,而 int 类型函数会进行强制类型转换,只要范围够,改成 char 类型是不会有影响的
2023.08.10 计算 \(20\times 20\) 矩阵从左上角到右下角最短路径条数使用 \(C_{n+m-2}^{m-1}=C_39^19\),爆了 int
2023.08.10 二分:如果有 r = mid
,那么 while 循环的条件必定为 l < r
2023.08.10 如果二分结束后答案使用 mid,那么当 n = 1 时 mid 并没有被赋值,会导致错误
2023.08.10 二分 while 结束条件 l < r
,那么结果使用 l 和 l + 1
2023.08.10 质数筛筛到质数时没想到最小质因数就是自身
2023.08.10 做减法时没有加上 abs 导致负数索引,爆数组
2023.08.11 在能够改变一个数字的情况下,两端最长上升字串可以拼起来
2023.08.12 求最大值最小用二分答案
2023.08.12 01 背包 dp 答案所在的方格下标为背包最大容量而不是物品个数
2023.08.12 题目要求不可能完成就输出 Fail
,而程序中没有特判(ans 变量的值没有发生改变)
2023.08.12 结构体排序 cmp 比较函数只写上了 a.w < b.w
,忘记了在他们相同时还需要比较 a.v > b.v
2023.08.14 并查集没有考虑到未初始化时 fa
数组中的值都是 \(0\)。
2023.08.18 动态规划反向思维:表示某区间交了作业 -> 表示某区间没有交作业,因此需要从大区间枚举到小区间
2023.08.18 动态规划忘记给结构体数组排序
2023.08.18 动态规划先赋值初始值再进行 memset 导致爆炸
2023.08.18 没注意到 char 数组下标从 0 开始
2023.08.20 忘了中央处理器是硬件,而操作系统是软件
2023.08.20 FTP 文件传输;TCP 传输控制;HTTP 超文本传输
2023.08.20 快速排序最坏时间复杂度为 \(O(n^2)\),而归并排序是 \(O(n \log n)\)
2023.08.20 printf 中,%Lf 输出的是 long double,%lf 输出的是 double
2023.08.21 一元二次方程求出的两个解没有保证 x1 < x2
2023.08.22 顶级域名是最右边的域名,如:www.luogu.com.cn
的顶级域名是 cn
2023.08.22 数子串时漏掉一个答案(abaab
长度为二的字串没数到 aa
)
2023.08.22 unsigned int -> signed int
:可能会溢出成负数,但是负数再次强制转换会变成原数,不可能大于原数
2023.08.22 \(Mib \rightarrow B\) 进率为 \(1024 \times 1024\),而 \(MB \rightarrow B\) 进率为 \(1000 \times 1000\),所以 $ 8,294,400B≈7.91MiB$
2023.08.22 碰到 \(s_1 \le s_2 \le ... \le s_n\) 这种式子,考虑 \(n\) 个元素全部相等或全部不等的情况
2023.08.22 真子集概念:是集合的子集但不能等于集合本身
2023.08.22 若输入什么东西,那么某变量的值是多少(按照输入完之后的值来判断)
2023.08.22 判断变量值是否会超过 long long:老老实实计算
2023.08.22 判断递归函数调用次数:考虑最坏情况
2023.08.22 upper_bound 返回大于某元素值的第一个元素,无法处理最后一位
2023.08.22 输入数组元素时需要写代表值的表达式(如果数组为 a,那么应该写 *(a+i)
而不是 a+i
2023.08.22 数据组数不一定影响时间复杂度,而是要看函数调用次数或循环执行次数
2023.08.22 判断程序是否能 AC,除了考虑算法复杂度,数组下标会不会爆,还需要考虑数据范围是否会爆 long long
2023.08.22 用按位异或 ^
也可以完成两个变量互换,但是如果引入中间变量 \(t\),则需关注是否定义了这个变量
2023.08.22 a[i] ^ i
与 a[i] ≠ i
等价
2023.08.24 顶级域名是以 .
分割的最后(最右边)一个字符串
2023.08.24 如果 q 是一个指针,那么 (*q)
可以直接改变它的值
2023.08.24 \(n^2\) 和 \(n \log^2 n\) 是 \(n^2\) 阶数更高,判断循环时间复杂度是注意边界情况,如循环变量为最小值或最大值或 \(0/1\) 的情况
2023.08.24 四个整数满足 \(1 \leq a,b,c,d \leq 6\),那么满足 \(a<b,b>c,c<d\) 的情况数:枚举 \(b,c\),所以情况数为 $$\sum\limits_{i=2}^{6}(i-1) \sum\limits_{j<i}(j-1)$$
2023.08.24 十进制小数 \(0.3\) 转八进制:$$0.3 \times 8=2.4 \rightarrow 2,\ 0.4 \times 8=3.2 \rightarrow 3\ ......$$
2023.08.24 union
取 sizeof
:取所有元素的最大大小(bool
一字节;short
两字节;enum
视为 int
四字节)
2023.08.24 插入复杂度 \(O(\log n)\),查询复杂度 \(O(n)\),遍历复杂度 \(O(n \log n)\),所以插入排序复杂度为 \(O(n \log n+n^2+n \log n)\),三项为插入复杂度+排序时遍历复杂度+排序后遍历输入复杂度,其中取阶数最高的 \(n^2\)
2023.08.24 CSP 第一届时间是 \(2019\) 年
2023.08.24 字符串输出时未注意区分大小写
2023.08.24 字符串 size
和 length
都是 \(O(1)\)
2023.08.24 "字符串均由小写字母 a
或 b
组成,判断时间复杂度",考虑极端情况:全是 a
或者全是 b
2023.08.24 改变变量初始值对结果是否有影响:根据变量在程序中的使用(特别是赋值语句),判断是否会被初始值影响
2023.08.24 bit >= 0
等价于 ~bit
(位运算 ~
按位取反)
2023.08.25 堆排序(桶排序),快速排序,选择排序和希尔排序都不是稳定的排序算法
2023.08.25 不含重边也不包含自环的图称为简单图
2023.08.25 ∧
表示 &&
,∨
表示 ||
,¬
表示 !
,优先级:¬ -> ∧ -> ∨
2023.08.25 用双指针求 lower_bound
和 upper_bound
时间复杂度为 \(O(n)\),而使用二分的复杂度是 \(O(n \log n)\)(排序)
2023.08.25 std::string::insert
时间复杂度 \(O(n)\)(\(n\) 为字符串长度)
2023.08.25 用字符串表示数字:位数和*长度是不相同的(符号不计入位数时)。如 -114514
位数为 \(6\),长度为 \(7\)
2023.08.25 std::string::insert
接收的位置参数为 x 时,是在 x 位置的那一位前进行插入,比如 insert(i, 1, 'c')
等价于 substr(0, i) + 'c' + substr(i, s.length())
,三段分别为 \(0 \sim i-1\),插入的字符 c
,\(i \sim n.end()\)
2023.08.25 没注意到函数最后还有 swap(a, b)
导致 i
,j
写反
2023.08.25 用大根堆实现小根堆:重载运算符,在大于运算符中写判断小于的条件
2023.08.25 ind
一般表示入度,所以拓扑排序中的入队列条件一般为 !ind[i]
2023.08.25 C++,C,PHP,JavaScript,Perl,VB 都是弱类型编程语言,因为可以进行强制类型转换
2023.08.25 \(\cfrac{\sqrt{2}}{2+\sqrt{2}}=\cfrac{1}{\sqrt{2}+1} \rightarrow O(1)\)
2023.08.25 Trans 是 xor shift 算法,可以把一个数变为另一个数,但是有特例:Trans(0)=0
2023.08.26 看到最大值的一般思路:枚举最大值
2023.08.26 \(499122177 \times 998244353\) 并没有爆 long long
2023.08.26 dfs 结束条件不写 return
语句
2023.08.27 pair
弄反 first
和 second
2023.08.28 子序列可以不连续,字串不可以。最长下降子序列可以不连续
2023.08.28 l<=r
二分完成后答案用 l
的值,不用 mid
Updating...