摘要: 基础 语法基础:函数、指针、引用、结构体、类、速通Python 算法基础:模拟、递归、回溯、递推、贪心、二分(整体二分)、三分 排序:选择排序、冒泡排序、插入排序、快速排序、归并排序、桶排序、基数排序、堆排序、希尔排序 高精度整数、位运算、时空复杂度分析 离散化、前缀和和差分、逆序对、扫描线、双指针 阅读全文
posted @ 2020-09-15 11:23 purinliang 阅读(1343) 评论(0) 推荐(0) 编辑
摘要: Reduce (C++17) ll s = reduce(a + 1, a + 1 + n); // 求和 ll s = reduce(a + 1, a + 1 + n, std::plus<ll>); // 求和 double s = reduce(a + 1, a + 1 + n, std::m 阅读全文
posted @ 2024-05-03 11:50 purinliang 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 二分答案的复杂度log(ans),check的复杂度一般至少是O(n)(甚至是nlogn),那么q次询问的复杂度就是 \(O(q*log(ans)*n)\) q通常与n同规模。如果把询问合并到一起回答,就可以优化复杂度,这也是整体二分的不一样之处。总的来说,对整个ans的值域像线段树一样进行递归,每 阅读全文
posted @ 2024-04-25 20:33 purinliang 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 想着一直都没有写过三分的模板,每次都是用for循环收尾,习惯确实不太好。 三分法求先增后减或者先减后增函数的最值。其实都没必要是上凸或者下凸的函数。 下面是每次缩减1/3长度的写法,比较容易理解,面对负数等情况也不容易出问题。 // x = 4, f(x) = 20 ll f (ll x) { re 阅读全文
posted @ 2024-04-20 17:49 purinliang 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 最大公因数(GCD) 两个数的最大公因数很好做,使用内置的库函数即可,注意x和y的类型要相同。 ll gcd = __gcd (x, y); 如果要求多个数的最大公因数,那么初始化为0(因为根据定义,0和任何数x的gcd都是x,所以0是gcd操作的幺元),然后分别进行gcd即可。 ll gcd = 阅读全文
posted @ 2024-04-14 13:06 purinliang 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 父级页面:【数学】组合数学 卡特兰数 记号为 \(H_n\) 第n个卡特兰数,下面的n就是指这个。 \(H_0=1, H_1=1, H_2=2, H_3=5, H_4=14, H_5=42\) 卡特兰数最常见的场景是合法的括号序,还有栈进出的方案。他们的特点就是“右括号”、“出栈”的次数不能超过剩余 阅读全文
posted @ 2024-04-12 12:05 purinliang 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 父级页面:【数学】组合数学 排列 组合 可重排列 可重组合 隔板法 盒子可以为空 隔板法:x个相同的小球,有y个不同的盒子,每个盒子可以为空,求有多少种方案数?把y个不同的盒子视作y-1个不同的隔板,然后把小球视作不同的,全排列有 \(A_{x+y-1}^{x+y-1}\) 种,然后除以隔板的全排列 阅读全文
posted @ 2024-04-12 12:03 purinliang 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 问题描述 给出 \(n + 1\) 个二维平面上的点对 \((x_0, y_0), (x_1, y_1), (x_2, y_2), \cdots, (x_{n}, y_{n})\) ,求一个经过这些点的不超过 \(n\) 次的多项式 \(P(x) = p_{n} \cdot x^{n} + p_{n 阅读全文
posted @ 2024-04-10 20:57 purinliang 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 树的重心的定义是,对树中的某个点,以这个点为根,然后它会拥有若干棵子树,取出最大的那棵子树的size,然后在所有点中求最小的最大的子树的size的点,这个点就是树的重心。简单来说就是找到某个点r,去掉r之后,每棵子树是长得最平均的。树的重心最多有2个(这时候重心其实是在这两点之间的边上),最少有1个 阅读全文
posted @ 2024-04-10 07:14 purinliang 阅读(3) 评论(0) 推荐(0) 编辑
摘要: Manacher算法的本质是计算以字符串中的“每个字符”和“每两个相邻字符之间的空隙”作为对称中心的最大回文串的长度。所以利用这个性质可以解决一系列与子串是否是回文串、子串有多少是回文串的问题。 namespace Manacher { static const int MAXN = 1e6; in 阅读全文
posted @ 2024-04-07 11:58 purinliang 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 原本不想写这个的,但是今天错了一次。写一下让自己以后多一个参考。 Floyd算法初始化两点之间的距离为无穷大,然后自己到自己的距离为0。 然后枚举所有的边,初始化对应两点的边权,注意处理平行边或者自环的情况。推荐用min操作。 第一维枚举中转点k,也就是阶段。 第二第三维枚举图中的两点i, j,也就 阅读全文
posted @ 2024-04-04 02:42 purinliang 阅读(2) 评论(0) 推荐(0) 编辑