07 2022 档案
摘要:https://atcoder.jp/contests/abc261/tasks/abc261_e https://atcoder.jp/contests/abc261/editorial/4490 思路是 f[i]=0或1,fun[i]=0或1 fun[0]表示前面的累计操作会把0变为什么数, f
阅读全文
摘要:set的比较函数必须写成仿函数(class、struct、lambda) 而不能写成函数 且operator()的参数和函数都需要用const修饰 举例: struct cmp { bool operator()(const pair<int, string>& p1,const pair<int,
阅读全文
摘要:一个序列是括号序列的条件是:在所有位置,前面(含当前位置)的左括号的数量大于等于右括号的数量,且最终相等。 例题: https://codeforces.com/contest/1709/problem/C #include<bits/stdc++.h> using namespace std; t
阅读全文
摘要:cout输出浮点数默认保留六位有效数字。 按照%lf输出,即保留六位小数 cout << fixed << a << endl; View Code 设定保留小数位数 #include<iomanip> cout << setiosflags(ios::fixed) << setprecision(
阅读全文
摘要:可以证明,此最小距离点为全部点坐标的中位数。
阅读全文
摘要:拓扑排序用于解决有向无环图的一些相关问题。 priority_queue<pair<int, int>,vector<pair<int,int>>,greater<pair<int, int>>> deg_idx; for (int i = 1; i <= n; i++) { deg_idx.pus
阅读全文
摘要:设有n个位置,k个小球 由于小球完全相同,需要使用隔板法。 n个位置对应n-1个隔板,再加上k个小球,共n+k-1个位置,来放置小球和隔板 答案为C(n+k-1, k) 例题: 2338. 统计理想数组的数目 https://leetcode.cn/problems/count-the-number
阅读全文
摘要:并查集初始化为p[i]=i 每次合并时,向右合并 区间大小为sz[find(i)]-1 例题: 2334. 元素值大于变化阈值的子数组 https://leetcode.cn/problems/subarray-with-elements-greater-than-varying-threshold
阅读全文
摘要:sort的比较函数可以视为重写小于号,也可以视为按照cmp为true的顺序排序 lower_bound可以视为重写小于号,且cmp的第一个参数为容器中的元素,第二个参数为二分查找的元素。 查找的是第一个非小于的为位置,即大于等于的为位置。 upper_bound可以视为重写小于等于号?未查证。
阅读全文
摘要:没有重边和自环,连通块为一个环等价于连通块中每个节点的度为2
阅读全文
摘要:C++中,=、+=、^=等赋值运算符,返回左操作数的引用,故可以连续操作 比如,a=b=c 比如(a+=b)%=MOD
阅读全文
摘要:状态压缩dp的时间复杂度一般时O(n*2^m) 可以将2^m优化为2^(m/2) 具体看例题: 牛客网小白月赛53 F. Freezing https://ac.nowcoder.com/acm/contest/11230/F dp[hi][li]数组的状态定义为,高8位为hi,低8位与li没有交集
阅读全文
摘要:LL GCD(LL a, LL b) { return b == 0 ? a : GCD(b, a % b); } View Code 此写法可以防止%0出现浮点数错误
阅读全文
摘要:操作: pushup:由子节点算父节点信息 build:建立线段树,将一段区间初始化为线段树 modify:修改,修改某个点,或修改某个区间(需要使用pushdown) query:查询,查询某一段区间的信息 pushdown:父节点修改传递到子节点修改(懒标记) 原理: 满二叉树: 节点编号: 一
阅读全文
摘要:pair_hash struct PairHash { size_t operator()(const pair<int,int>& p) const { return hash<int>{}(p.first)^ hash<int>{}(p.second); } }; View Code vecto
阅读全文
摘要:解决的问题: 1、快速求前缀和(logn)(区间求和) 2、修改某一个数(logn)(单点修改) 对比:数组:求前缀和On,修改O1;前缀和数组:求前缀和O1,修改On C[x]表示,以x结尾,长度为lowbit(x)的区间中的计数 查询: 修改: 模板: int a[200010]; LL tr[
阅读全文
摘要:连通分量可以用并查集处理。 连通分量是环的条件可以是:边数等于点数,每个点的度都为2。 例题:AcWing 4493. 环形连通分量 #include<bits/stdc++.h> using namespace std; typedef long long LL; int p[200010]; i
阅读全文
摘要:for (int j = (i - 1) & i; j; j = (j - 1) & i) cout << j << endl; View Code 其中 i 为原始的数字,j为子集(二进制一)
阅读全文
摘要:并查集基本操作: 1、合并两个集合 2、查询集合的代表元素(祖先节点) 优化方式: 1、路径压缩(合并查询复杂度都是logn) 2、按秩合并(每次合并将深度较小的合并到深度较大的,logn) 3、1+2可以达到O(α(n))≈O(1),α():反Ackermann函数 扩展: 1、记录集合大小 2、
阅读全文
摘要:from __future__ import print_function __future__可以在旧版python中引入新的功能,比如通过print_function引入新版的print特性 from bcc import BPF 引入bcc中BPF相关类 import argpars argp
阅读全文
摘要:为了实例化模板函数,编译器必须掌握函数模板/类模板成员函数的声明和定义。 因此只能将模板函数/类模板尘缘函数的声明和定义都放置在同一个头文件/源文件中(或者定义放在主函数的文件中)。
阅读全文
摘要:double和long long都是8字节,但是由于double使用科学计数法表示,所以数据范围比long long要大很多, 可以用来解决long long数据越界的问题(但是科学计数法精度会降低), long double 16/12字节,可以表示的范围更大。
阅读全文
摘要:可能会存在long long类型相乘超出long long表示的范围 可以考虑将long long转为double计算 因为浮点数是使用科学计数法表示的,double可表示的范围比long long大得多(但是会损失精度)
阅读全文
摘要:单调队列可以求出,区间内的最值。 对于二维的情况,可以先在每一行,用单调队列求出,行方向上的最值。 然后在行方向上的最值的基础上,在每一列,用单调队列求出列方向上的最值。 即可得到二维区间的最值。 例题: 1091. 理想的正方形 代码: #include<bits/stdc++.h> using
阅读全文
摘要:对于曼哈顿距离存在另一种形式的计算: 等式右边两项分别对应于:x1和x2、y1和y2的大小关系相同和不同的情况。 这样做的好处是,对于多个(x2,y2)点,可以预处理出全部点的最大和最小的x2+y2、x2-y2,这样对于任意其他点,可以在O(1)计算出它和全部点的曼哈顿距离的最大值。 例题: htt
阅读全文