随笔分类 -  Algorithm

摘要:并查集基本操作: 1、合并两个集合 2、查询集合的代表元素(祖先节点) 优化方式: 1、路径压缩(合并查询复杂度都是logn) 2、按秩合并(每次合并将深度较小的合并到深度较大的,logn) 3、1+2可以达到O(α(n))≈O(1),α():反Ackermann函数 扩展: 1、记录集合大小 2、 阅读全文
posted @ 2022-07-07 19:11 80k 阅读(65) 评论(0) 推荐(0) 编辑
摘要:异或与加法同奇偶性 且 两项分别对应不进位的结果和进位的值 阅读全文
posted @ 2022-07-05 10:29 80k 阅读(118) 评论(0) 推荐(0) 编辑
摘要:double和long long都是8字节,但是由于double使用科学计数法表示,所以数据范围比long long要大很多, 可以用来解决long long数据越界的问题(但是科学计数法精度会降低), long double 16/12字节,可以表示的范围更大。 阅读全文
posted @ 2022-07-04 16:46 80k 阅读(313) 评论(0) 推荐(0) 编辑
摘要:可能会存在long long类型相乘超出long long表示的范围 可以考虑将long long转为double计算 因为浮点数是使用科学计数法表示的,double可表示的范围比long long大得多(但是会损失精度) 阅读全文
posted @ 2022-07-04 16:36 80k 阅读(365) 评论(0) 推荐(0) 编辑
摘要:单调队列可以求出,区间内的最值。 对于二维的情况,可以先在每一行,用单调队列求出,行方向上的最值。 然后在行方向上的最值的基础上,在每一列,用单调队列求出列方向上的最值。 即可得到二维区间的最值。 例题: 1091. 理想的正方形 代码: #include<bits/stdc++.h> using 阅读全文
posted @ 2022-07-03 20:48 80k 阅读(26) 评论(0) 推荐(0) 编辑
摘要:对于曼哈顿距离存在另一种形式的计算: 等式右边两项分别对应于:x1和x2、y1和y2的大小关系相同和不同的情况。 这样做的好处是,对于多个(x2,y2)点,可以预处理出全部点的最大和最小的x2+y2、x2-y2,这样对于任意其他点,可以在O(1)计算出它和全部点的曼哈顿距离的最大值。 例题: htt 阅读全文
posted @ 2022-07-01 20:09 80k 阅读(399) 评论(0) 推荐(0) 编辑
摘要:如果一个二维网格中数据不重复,可以确定其鞍点最多有一个。 假设鞍点是列极大行极小, 则,与鞍点同行或同列的点显然不是鞍点, 与鞍点不同行列的点z,可以对应,鞍点行列中的两个点x和y 且显然x<y(因为x<鞍点<y) 如果z<x,则z不为列极大,如果z>y,则z不为行极小, 如果x<z<y,则z不为列 阅读全文
posted @ 2022-06-28 16:27 80k 阅读(37) 评论(0) 推荐(0) 编辑
摘要:对于大数,可以使用string存储。 如果要构造最大的大数,注意数的大小首先比较数的长度,然后从首位往后面的位比较。 例题: https://atcoder.jp/contests/abc257/tasks/abc257_e 首先可以计算出,可以构造出的最长位数 然后再从大到小对每一位,贪心的判断是 阅读全文
posted @ 2022-06-28 11:18 80k 阅读(43) 评论(0) 推荐(0) 编辑
摘要:在求组合数时,其除数有阶乘形式,会非常大。 所以需要用除法逆元记录。 有公式1/num=pow(num,P-2)(mod P),P是质数。 其中pow可以用QuickPow算法求出。 在阶乘递推时,可以有n!=(n-1)!*n;从前向后递推 阶乘的逆元在递推时,有1/(n!)=1/((n-1)!)/ 阅读全文
posted @ 2022-06-28 09:52 80k 阅读(138) 评论(0) 推荐(0) 编辑
摘要:组合数与杨辉三角有一一对应的关系: 根据杨辉三角的构造方式,以及组合数的性质:C(n,m)=C(n-1,m)+C(n-1,m-1) 可得杨辉三角的每一行,都对应着一个固定底数的组合数。 例题: https://codeforces.com/contest/1696/problem/E 同时有组合数公 阅读全文
posted @ 2022-06-27 22:12 80k 阅读(386) 评论(0) 推荐(0) 编辑
摘要:单调栈可以获得比第一个比当前数大/小的数的位置。 使用deque也可以用来二分查找。 如下例题: https://codeforces.com/contest/1696/problem/D 可以存储当前数的单调增栈和单调减栈,然后根据栈中首元素的相对位置,进行选择和二分查找。 #include<bi 阅读全文
posted @ 2022-06-27 21:33 80k 阅读(57) 评论(0) 推荐(0) 编辑
摘要:如下图灵茶山艾府提供的题解中绿色三角形所示: 可以在一次DFS中,处理出节点的进出“时间”,这样,如果是有直接亲缘关系的节点,则会有时间上的包含关系。 时间用全局变量表示,进入DFS函数时记录进入时间,DFS完全部子树后,返回前,记录出时间。 https://www.bilibili.com/vid 阅读全文
posted @ 2022-06-27 16:55 80k 阅读(100) 评论(0) 推荐(0) 编辑
摘要:如果要求子区间中全部数字的平均数大于100,可以先将区间中全部数字都减100,然后再判断区间和是否大于0,这样就可以避免平均数的值和区间长度相关的问题。 例题: AcWing 4487. 最长连续子序列 #include<bits/stdc++.h> using namespace std; typ 阅读全文
posted @ 2022-06-26 19:33 80k 阅读(49) 评论(0) 推荐(0) 编辑
摘要:AcWing 1086. 恨7不成妻 数位dp例题 注意一个数不能分别对两个不同的数取余,只能将其保存下来 例如下面代码中的prev_b #include<bits/stdc++.h> using namespace std; typedef long long LL; LL MOD = 10000 阅读全文
posted @ 2022-06-24 16:15 80k 阅读(37) 评论(0) 推荐(0) 编辑
摘要:C++中,对负数取模的结果为负数,需要特殊写取模函数 LL Mod(LL num,LL mod) { return (num%mod+mod)%mod; } View Code 阅读全文
posted @ 2022-06-22 08:47 80k 阅读(321) 评论(0) 推荐(0) 编辑
摘要:若数位dp中的数字性质要求数字不含前导0,则可以考虑。 dp数组中保留存在前导0的数字种类。 在遍历每一位时,第一位从1开始,其他位从0开始。 然后再把位数低于当前数字的结果(不含前导0)累加。 (含有前导0时,则可以遍历每一位时都从0开始,最后也不用累加结果) (如果数字是否含有前导0对结果(数字 阅读全文
posted @ 2022-06-21 09:09 80k 阅读(60) 评论(0) 推荐(0) 编辑
摘要:此题中,dp数组保存存在前导0的windy数(因为在使用时,当前位的前面会存在非0数) 结果为不存在前导0的windy数(循环过程中第一次不包含0)。 #include<bits/stdc++.h> using namespace std; typedef long long LL; LL dp[1 阅读全文
posted @ 2022-06-20 20:49 80k 阅读(21) 评论(0) 推荐(0) 编辑
摘要:ABC 256 G - Black and White Stones 题目: https://atcoder.jp/contests/abc256/tasks/abc256_g 题解: https://atcoder.jp/contests/abc256/editorial/4142 思路: 求一个 阅读全文
posted @ 2022-06-20 11:17 80k 阅读(94) 评论(0) 推荐(1) 编辑
摘要:数位DP的一般形式是: 在[X,Y]区间内,找到满足某种性质的数的个数。 技巧1:两端区间变为一边区间,计算[0, X]和[0, Y]在相减 技巧2:以树的方式考虑,从高位到低位,考虑枚举的数的当前位小于还是等于Y的当前位。 AcWing 1081. 度的数量 #include<bits/stdc+ 阅读全文
posted @ 2022-06-19 22:11 80k 阅读(45) 评论(0) 推荐(0) 编辑
摘要:题目链接: https://codeforces.com/contest/1695/problem/D2 https://atcoder.jp/contests/apc001/tasks/apc001_e 解题思路: 可以考虑,对于每个节点v,其有k个子节点,则每个子节点中至少有k-1个侦查点,才能 阅读全文
posted @ 2022-06-19 22:07 80k 阅读(28) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示