摘要: lecture4 Addressres C语言提供了了两种关于内存的强大操作 & // 提供在内存中所存事物的地址 * // 指示编译器去往内存中某个位置 example: #include<stdio.h> int main(void) { int n = 50; printf("%p\n", & 阅读全文
posted @ 2023-12-21 19:05 viewoverlook 阅读(18) 评论(0) 推荐(0)
摘要: lecture3 Running time 符号: O:大O符号,表示上限 \(\Omega\):大Omega符号,表示下限 \(\Theta\):大Theta符号,表示上下限 seach.c #include <cs50.h> #include <stdio.h> int main(void){ 阅读全文
posted @ 2023-12-21 19:04 viewoverlook 阅读(16) 评论(0) 推荐(0)
摘要: lecture2 Compiling 为什么在云端上有cs50这个头文件,在本机上没有? 在机器的某处存在~/usr/include/cs50.h,但是在本机上没有 代码编译四步骤 preprocessing 将散列包含行的内容转化为其他内容 compiling 将源代码转化为汇编代码 assemb 阅读全文
posted @ 2023-12-21 19:04 viewoverlook 阅读(12) 评论(0) 推荐(0)
摘要: 高斯消元 设有n个未知数m个方程的线性方程组 \[\begin{cases} a_{11}x_{1}+a_{12}x_{2}+\dots+a_{1n}x{n}=b_{1} \\ a_{21}x_{1}+a_{22}x_{2}+\dots+a_{2n}x{n}=b_2 \\ \dots \dots \ 阅读全文
posted @ 2023-12-21 19:04 viewoverlook 阅读(49) 评论(0) 推荐(0)
摘要: 组合数学 概念 二项式定理 \[\begin{array}{l} (x+y)^{n} = \left(\begin{array}{cc} n \\ 0 \end{array} \right) x^{n}y^{0} + \left(\begin{array}{cc} n \\ 1 \end{array 阅读全文
posted @ 2023-12-21 19:03 viewoverlook 阅读(29) 评论(0) 推荐(0)
摘要: 离散化,前缀和,差分 一维前缀和和差分之前学过不再记录 二维情况 前缀和 多维前缀和的普通求解方法几乎都是基于容斥原理 例如有这样一个矩阵,可以视为二维数组: 1 2 4 3 5 1 2 4 6 3 5 9 定义一个矩阵\(sum\)使得\(sum_{x,y}=\sum_{i=1}^{x}\sum_ 阅读全文
posted @ 2023-12-21 19:03 viewoverlook 阅读(65) 评论(0) 推荐(0)
摘要: 状压dp 暴力 枚举每一天摸不摸鱼, 对于每一组方案, 我们都可以判断其可不可行, 从可行方案中选择快乐值总和最大的一组; 复杂度\(O(2^{20})\) 每一组方案可以用 一个长度为n的二进制串来表示; 从右到左第i个位置表示第i天摸不摸鱼(1表示, 0表示不摸) 当n=5时, 10111表示在 阅读全文
posted @ 2023-12-21 19:02 viewoverlook 阅读(10) 评论(0) 推荐(0)
摘要: 滑动窗口(双指针) #include <iostream> #include <cstring> #include <queue> #include <algorithm> #include <cmath> #include <stack> #include <vector> #include <m 阅读全文
posted @ 2023-12-21 19:02 viewoverlook 阅读(5) 评论(0) 推荐(0)
摘要: 概率dp f[x]表示能走到x号城市的概率, f[1] = 1 考虑从x号城市出发到y号城市的高速公路, 通过x号城市走到y号城市的概率有多大? f[y] += f[x] / d[x], d[x]表示从x号城市出发的高速公路一共有多少条; 能走到y号城市的概率 \[f[y] = \sum_{x\in 阅读全文
posted @ 2023-12-21 19:02 viewoverlook 阅读(9) 评论(0) 推荐(0)
摘要: 数位动态规划问题 今天,我们要给大家介绍的是数位动态规划。数位动态规划一般用来回答类似这样的问题: 请问区间 [l, r] 中有多少个满足某个条件的数。其中 l 和 r 的范围一般很大。 比如说我们有这样一个题: 数位和 请问 0 到 9 这些数字在 \([l, r](1≤l≤r≤10^{16})\ 阅读全文
posted @ 2023-12-21 19:01 viewoverlook 阅读(48) 评论(0) 推荐(0)
摘要: 排序 快排,归并排序之前已经熟悉不再赘述 计数排序 复杂度O(n+m) 计数排序适于值域范围较小的数字排序,核心思想: 每个数字出现几次 统计完每个元素出现次数后,求一边前缀和,就知道了每个数字排完序后的序列中出席拿的为止的范围(第几小到第几小都是这个数字) 把数字填入相应为止 保证稳定性: 相同数 阅读全文
posted @ 2023-12-21 19:01 viewoverlook 阅读(15) 评论(0) 推荐(0)
摘要: 换根树形动态规划 考虑以1为根的情况,size[i]表示以i为根的子树中有多少个点,f[i]表示考虑以i为根的子树,i到子树其他所有点的距离的和; 假设j是i的儿子,以j为根的子树对f[i]的贡献为f[j]+size[j] \[f[i] = \sum_{j\in son(i)}(f[j]+size[ 阅读全文
posted @ 2023-12-21 19:01 viewoverlook 阅读(27) 评论(0) 推荐(0)
摘要: 快速幂,快速乘,矩阵乘 快速幂 计算\(a^n(n\geqslant0)\),一般会对答案取个模 例如计算\(5^{11}\),考虑11二进制\((1011)_2\)有\(5^{11} = 5^8*5^2*5^1\) 将n的二进制中为1的位置对应的a的\(2^k\)次幂相乘就能得到最终结果 可以用\ 阅读全文
posted @ 2023-12-21 19:00 viewoverlook 阅读(18) 评论(0) 推荐(0)
摘要: 字符串 字符串匹配问题 在字符串s中查找某个字符串p是否出现 朴素做法 枚举s中每个长度为m的子串,然后判断这些子串和p一不一样 怎么判断一不一样? 一位一位比较,这时总的复杂度为\(O(nm)\) 字符串哈希优化,使用哈希可以做到\(O(n+m)\)的时间复杂度 KMP用线性复杂度解决字符串匹配问 阅读全文
posted @ 2023-12-21 18:59 viewoverlook 阅读(7) 评论(0) 推荐(0)
摘要: 简单博弈论 必胜态和必败态 假设游戏状态为有向无环图(即游戏状态可以被枚举完同时不会落入重复状态中) 必胜: 存在一个后继为必败态(两个状态均是先手状态,即当前局面下谁先走下一步) 必败: 不存在一个后继为必败态, 所有后继必胜 例: 纠正条件是每次可以往上或往左移动一格 分析: 定义当前每步必胜态 阅读全文
posted @ 2023-12-21 18:59 viewoverlook 阅读(74) 评论(0) 推荐(0)
摘要: 搜索,dfs依次枚举每一步向上走多少台阶,最后统计有多少可行的方案。(小规模可以,大规模gg) 组合数学 递归 考虑最后一步,我们只能从第9级或者第8级走过去。 对于任意的\(n\geq 2\)时有\(f(n) = f(n-2) + f(n - 1)\) 如果不递归 台阶数 1 2 3 4 5 6 阅读全文
posted @ 2023-12-21 18:58 viewoverlook 阅读(18) 评论(0) 推荐(0)
摘要: 分治 核心思想 自上而下通过递归不断地将大问题拆分成两个或多个子问题,直至被拆分出的子问题可以通过简单的方法解决 然后再自上而下地用子问题的解求解大问题的解 最终得出初始问题的解 思路: 每次将要修改的区间的分为左右两边,分别计算出要改变的数量,那么不断分治取min直至左右两边区间变为1(因为\(n 阅读全文
posted @ 2023-12-21 18:58 viewoverlook 阅读(30) 评论(0) 推荐(0)
摘要: 位运算 整数类型变量(正数),系统会先将数字转换为二进制形式再运算 计算机存储数字的补码,正数的补码就是原码,负数补码是符号位不变,原码每一位取反加一 常用位运算为左移(<<) 右移(>>): x<<k表示为x转换为二进制后,左移k位,末尾补k个0 x>>k表示x转换为二进制后,右移k位,前面补k个 阅读全文
posted @ 2023-12-21 18:57 viewoverlook 阅读(29) 评论(0) 推荐(0)
摘要: 二分, 三分 二分 算法简介: 有n个数\(a_1,a_2,\dots,a_n\)和m个 询问每次询问一个数,需要回答\(a_1,a_2,\dots,a_n\)里有多少个数字小于x 二分可以解决问题的共同点? 数组中存在一条分界线,使得分界线左边的位置都满足某个条件且右边位置不满足某个条件(这个条件 阅读全文
posted @ 2023-12-21 18:56 viewoverlook 阅读(23) 评论(0) 推荐(0)
摘要: Manacher 最长回文子串问题 一个字符串从左往右看和从右往左看是一样的叫回文串 回文串可以按长度的奇偶性分为奇数长度和偶数长度回文串 最长回文子串指对于任意一个给定的字符串,我们要求出这个字符串的最长回文子串 暴力 \(O(n^3)\) 枚举所有子串,检查当前枚举到的子串是否为回文串,最后从符 阅读全文
posted @ 2023-12-21 18:55 viewoverlook 阅读(20) 评论(0) 推荐(0)