随笔分类 - Algorithm
摘要:此题中对面包的分割,可以反向看做为合并。这样对面包的N-1次分割操作,可以视为类似哈夫曼树构建的N-1次合并,这样就可以利用哈夫曼编码的方式进行转化。
阅读全文
摘要:AtCoder Beginner Contest 252 E - Road Reduction https://atcoder.jp/contests/abc252/editorial/4005 可以证明,总可以构建出一个生成树,使某一点到其余点的距离,等于原图中某一点到其余点的最小距离。 证明方法
阅读全文
摘要:例题 AcWing 1010. 拦截导弹 建立最长下降子序列模型。 同时对于最少需要配备的系统数,可以利用贪心法,判断添加新系统还是放入某个旧系统中(若放入旧系统,则选择大于当前导弹高度的最小值,同时可以发现系统当前高度单调上升,可二分)。 AcWing 187. 导弹防御系统 上一题的拓展,由于有
阅读全文
摘要:对AcWing 1015. 摘花生(走一次)的拓展 二维网格,左上到右下走两次,或者左上到右下再到左上,求收集数总和的最大值。 等价于求两条路径,和行走方向是无关的。 故都可以等价为从左上同时走。 例题: AcWing 1027. 方格取数AcWing 275. 传纸条 构建dp的方法是,三位dp,
阅读全文
摘要:多重背包问题可以用单调队列进行优化 原理见:提高课1.3.1 背包模型(一) 离题:6. 多重背包问题 III 单调队列的deque实现如下: #include<bits/stdc++.h> using namespace std; int v[1010]; int w[1010]; int s[1
阅读全文
摘要:1、在图的邻接表存储中,可以使用模拟链表法: const int N,M=2*N; h[N],e[M],ne[M],idx;//链表头/链表结点的序号/链表节点的下一个节点 void add(int a,int b) { e[idx]=b; ne[idx]=h[a]; h[a]=idx++;} 也可
阅读全文
摘要:https://codingcompetitions.withgoogle.com/codejam/round/0000000000877b42/0000000000afdf76#problem 数学题,利用和的平方与平方的和以及交叉项的关系求解。 可以在k<=2的范围内得到一个有效的解。 #inc
阅读全文
摘要:https://codingcompetitions.withgoogle.com/codejam/round/0000000000877b42/0000000000afe6a1#analysis 一道复杂的字符串拼接模拟题。 可以考虑对每个字符串进行预处理。 如果在middle的字符在其他字符串中
阅读全文
摘要:正方形经过任意的旋转(90°)和翻转后,只能有8种情况,而非4!种。 解释如下: http://www.360doc.com/content/18/0407/14/30048172_743530034.shtml 可以用4种旋转和1种翻转,遍历到这8中情况。 例题: LCP 58. 积木拼接 先处理
阅读全文
摘要:在进行普通的BFS时,会将新的节点加入队尾。 但是由于01BFS的路径长度可能为0,故使用双端队列记录节点。如果路径为0,则加入队头,否则加入队尾。 例题:LCP 56. 信物传送 leetcode 2290. 到达角落需要移除障碍物的最小数目 class Solution { public: in
阅读全文
摘要:如果题目中数据较大,则尽可能将全部int替换为long long。因为很多地方都可能出现int*int爆int的情况
阅读全文
摘要:基数排序的思想是,对于一个给定的基数,每次排序构建基数数量的桶,并将数分配到桶里。 可以用count数组对桶中的数量计数,并转化为前缀数组记录桶中数字的位置。 LeetCode 164. 最大间距题解 class Solution { public: int maximumGap(vector<in
阅读全文
摘要:1、分治 2、记忆化 3、动态规划 https://codingcompetitions.withgoogle.com/codejam/round/0000000000877ba5/0000000000aa9280#problem #include <bits/stdc++.h> using nam
阅读全文
摘要:想要将集合中数字分为两个总和相等的集合,可以使用启发式优化的方式。 方法为:将数字依次加入到,两个集合中,当前和较小的集合。 这样可以将两个集合的误差降到一个数字的大小(|n|)级别,而非sum(|n|).
阅读全文
摘要:理论上unordered_map的存取速度很快。 但是在数据量很大的时候,哈希冲突过多会导致速度变慢。 此时可以使用map替代。(存疑) 同时,虽然unordered_map理论的插入是O(1),但是实际一秒只能运行1e5次左右,远低于1e8-1e9的数量级。 https://codeforces.
阅读全文
摘要:方法1:使用round()函数 方法2:(long long)(num/2.+0.5); 如果不加0.5,则会舍去造成数据不准。
阅读全文
摘要:https://codingcompetitions.withgoogle.com/codejam/round/0000000000876ff1/0000000000a45fc0#problem 1、利用总边数=度数/2。 2、为了解决度数不平衡的问题,交替使用T(随机传送)和W(邻接传送)操作。
阅读全文
摘要:在使用STL中的算法时一定要统一输入的数据类型。 否则会出现参数按照最右边进行解析的情况。 例如 对 vector<long long> v; long long res=accumulate(v.begin(),v.end(),0); 可能会返回错误的结果,因为模板对0解析是int型,内部求和也会
阅读全文
摘要:#pragma GCC optimize(3,"Ofast","inline") #include<bits/stdc++.h> #define fore(x,y,z) for(LL x=(y);x<=(z);x++) #define forn(x,y,z) for(LL x=(y);x<(z);x
阅读全文
摘要:在使用priority_queue、map、sort等,传入自定义比较函数时, comparator需要strict weak ordering,即comparator(x,x)必须返回false。
阅读全文

浙公网安备 33010602011771号