随笔分类 - Algorithm
摘要:可以发现,对于部分题目数据量较大,需要用long long存储,可以使用long long。 但是对于题目数据量极大,每一步都要取模的情况下,尽量使用int, 因为对于mod运算,long long比int慢很多(1-2倍),对于时间卡的严格的题目会超时。 例题: https://codeforce
阅读全文
摘要:开放地址法 M一般是N的十倍左右 find用于查找,看返回值是否为INF find用于插入,直接将待插入的值放到find返回的位置 会比unordered_set快5-10倍。
阅读全文
摘要:https://ac.nowcoder.com/acm/contest/38105/D #include<bits/stdc++.h> typedef unsigned long long LL; using namespace std; LL digit = 1e13; LL nums[20001
阅读全文
摘要:对a/b做上取整 1、转为浮点数(可能会有精度问题) int a=1; int b = 1; int res = int(ceil(double(a) / b)); View Code 2、通过判断能否整除(比较直观) int a=1; int b = 1; int res = a % b ? a
阅读全文
摘要:若集合中的任意数在三进制下只含有0和1,则有: 对任意集合中三点x、y、z,有y≠(x+z)/2,即2*y≠x+z,即集合中不存在任意两点x、z的平均值。 (因为2*y全部位均为0或2,而x+z至少存在一位为1) https://atcoder.jp/contests/arc145/editoria
阅读全文
摘要:对于长度为2N的括号序列,合法的数量为C(2N,N)/(N+1) 参考:https://blog.csdn.net/ffmpeg4976/article/details/42340379?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relev
阅读全文
摘要:https://www.bilibili.com/read/cv13020375/ https://files.cnblogs.com/files/ECJTUACM-873284962/bigint-10-2-src.7z 作者:C语言编程老师 https://www.bilibili.com/re
阅读全文
摘要: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
阅读全文
摘要:一个序列是括号序列的条件是:在所有位置,前面(含当前位置)的左括号的数量大于等于右括号的数量,且最终相等。 例题: https://codeforces.com/contest/1709/problem/C #include<bits/stdc++.h> using namespace std; t
阅读全文
摘要:可以证明,此最小距离点为全部点坐标的中位数。
阅读全文
摘要:拓扑排序用于解决有向无环图的一些相关问题。 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
阅读全文
摘要: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没有交集
阅读全文
摘要:操作: 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为子集(二进制一)
阅读全文