摘要:
数位动态规划问题 今天,我们要给大家介绍的是数位动态规划。数位动态规划一般用来回答类似这样的问题: 请问区间 [l, r] 中有多少个满足某个条件的数。其中 l 和 r 的范围一般很大。 比如说我们有这样一个题: 数位和 请问 0 到 9 这些数字在 \([l, r](1≤l≤r≤10^{16})\ 阅读全文
摘要:
排序 快排,归并排序之前已经熟悉不再赘述 计数排序 复杂度O(n+m) 计数排序适于值域范围较小的数字排序,核心思想: 每个数字出现几次 统计完每个元素出现次数后,求一边前缀和,就知道了每个数字排完序后的序列中出席拿的为止的范围(第几小到第几小都是这个数字) 把数字填入相应为止 保证稳定性: 相同数 阅读全文
摘要:
换根树形动态规划 考虑以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[ 阅读全文
摘要:
快速幂,快速乘,矩阵乘 快速幂 计算\(a^n(n\geqslant0)\),一般会对答案取个模 例如计算\(5^{11}\),考虑11二进制\((1011)_2\)有\(5^{11} = 5^8*5^2*5^1\) 将n的二进制中为1的位置对应的a的\(2^k\)次幂相乘就能得到最终结果 可以用\ 阅读全文
摘要:
字符串 字符串匹配问题 在字符串s中查找某个字符串p是否出现 朴素做法 枚举s中每个长度为m的子串,然后判断这些子串和p一不一样 怎么判断一不一样? 一位一位比较,这时总的复杂度为\(O(nm)\) 字符串哈希优化,使用哈希可以做到\(O(n+m)\)的时间复杂度 KMP用线性复杂度解决字符串匹配问 阅读全文
摘要:
简单博弈论 必胜态和必败态 假设游戏状态为有向无环图(即游戏状态可以被枚举完同时不会落入重复状态中) 必胜: 存在一个后继为必败态(两个状态均是先手状态,即当前局面下谁先走下一步) 必败: 不存在一个后继为必败态, 所有后继必胜 例: 纠正条件是每次可以往上或往左移动一格 分析: 定义当前每步必胜态 阅读全文
摘要:
搜索,dfs依次枚举每一步向上走多少台阶,最后统计有多少可行的方案。(小规模可以,大规模gg) 组合数学 递归 考虑最后一步,我们只能从第9级或者第8级走过去。 对于任意的\(n\geq 2\)时有\(f(n) = f(n-2) + f(n - 1)\) 如果不递归 台阶数 1 2 3 4 5 6 阅读全文
摘要:
分治 核心思想 自上而下通过递归不断地将大问题拆分成两个或多个子问题,直至被拆分出的子问题可以通过简单的方法解决 然后再自上而下地用子问题的解求解大问题的解 最终得出初始问题的解 思路: 每次将要修改的区间的分为左右两边,分别计算出要改变的数量,那么不断分治取min直至左右两边区间变为1(因为\(n 阅读全文
摘要:
位运算 整数类型变量(正数),系统会先将数字转换为二进制形式再运算 计算机存储数字的补码,正数的补码就是原码,负数补码是符号位不变,原码每一位取反加一 常用位运算为左移(<<) 右移(>>): x<<k表示为x转换为二进制后,左移k位,末尾补k个0 x>>k表示x转换为二进制后,右移k位,前面补k个 阅读全文
摘要:
二分, 三分 二分 算法简介: 有n个数\(a_1,a_2,\dots,a_n\)和m个 询问每次询问一个数,需要回答\(a_1,a_2,\dots,a_n\)里有多少个数字小于x 二分可以解决问题的共同点? 数组中存在一条分界线,使得分界线左边的位置都满足某个条件且右边位置不满足某个条件(这个条件 阅读全文