Loading

随笔分类 -  ACM集训

摘要:#include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<map> #include<set> #include<algorithm> #include<queue> 阅读全文
posted @ 2020-02-14 20:17 MQFLLY 阅读(152) 评论(0) 推荐(0)
摘要:inline int read() { char ch, c=' '; int res; while (ch = getchar(), ch < '0' || ch>'9') c = ch; res = ch - 48; while (ch = getchar(), ch >= '0' && ch 阅读全文
posted @ 2020-02-12 14:23 MQFLLY 阅读(143) 评论(0) 推荐(0)
摘要:符号说明 a|b a整除b (a,b) a与b的最大公因数 [a,b] a与b的最小公倍数 pα||a pα|a但pα+1∤a a≡b(mod m) a与b对模m同余 a-1 (mod m) a对模m的数论倒数 性质1 如果a|b,那么(-a)|b,反过来也成立 性质2 如果a|b,b|c,那么a| 阅读全文
posted @ 2020-02-10 22:38 MQFLLY 阅读(240) 评论(0) 推荐(0)
摘要:1.刘汝佳紫书区间问题三大情况 1.选择不相交区间 贪心策略:一定要选择第一个区间 2.区间选点问题 贪心策略:取最后一个点 3.区间覆盖问题: n个闭区间,选择尽量少的区间覆盖一条指定线段[s,t] 贪心策略:预处理掉[s,t]之外的区间,闭区间从最左向右开始覆盖 应用 Open Judge 13 阅读全文
posted @ 2020-02-10 18:55 MQFLLY 阅读(174) 评论(0) 推荐(0)
摘要:数据结构往往可以在不改变主算法的前提下题高运行效率,具体做法可能千差万别,但思路却是有规律可循 经典问题:滑动窗口 单调队列O(n) POJ 2823 我开始写的: TLE 说明STL的库还是有点慢 #include<iostream> #include<cstdio> #include<strin 阅读全文
posted @ 2020-02-09 14:02 MQFLLY 阅读(255) 评论(0) 推荐(0)
摘要:所以,每个子集对应了一个二进制数:这个二进制数的每个1都代表了一个元素,也因此所以子集的数量是2n #include<iostream> #include<cstdio> #include<string> #include<algorithm> #include<queue> #include<se 阅读全文
posted @ 2020-02-08 16:24 MQFLLY 阅读(273) 评论(0) 推荐(0)
摘要:前置知识 (1)如果将 aa 自乘一次,就会变成 a^2a2 。再把 a^2a2 自乘一次就会变成 a^4a4 。然后是 a^8a8…… 自乘 nn 次的结果是 a^{2^{n}}a2n 。对吧…… (2)a^xa^y = a^{x+y}axay=ax+y,这个容易。 (3)将 bb 转化为二进制观 阅读全文
posted @ 2020-02-08 15:06 MQFLLY 阅读(302) 评论(0) 推荐(0)
摘要:树形DP 加分二叉树 洛谷P1040 注意中序遍历的特点:当根节点编号k时,编号小于k的都在其左子树上,编号大于k的都在右子树 转移方程 f[i,j]=max{f[i,k-1]*f[k+1,j]+d[k]} ,f[i,j]表示中序遍历i到j的二叉树最大加分 时间复杂度O(N3) #include<i 阅读全文
posted @ 2020-02-07 12:31 MQFLLY 阅读(142) 评论(0) 推荐(0)
摘要:LCA 倍增法求最近公共祖先 首先对于每个结点先进行dfs预处理它的深度,再记录下它们往父亲方向走2的0次,1次...k次步所到达的结点。在这里2的k次大于整棵树的最大深度。 预处理完后,需要查询两个点u,v的LCA时,先将u,v中深度较大的利用预处理的数组走到和另一个结点相同深度,操作次数不会超过 阅读全文
posted @ 2020-02-06 10:56 MQFLLY 阅读(142) 评论(0) 推荐(0)
摘要:最小生成树(无向图) Kruskal 给所有边按从小到大排序 形成环则不选择(利用并查集) P1546 最短网络 https://www.luogu.com.cn/problem/P1546 #include<iostream> #include<cstdio> #include<string> # 阅读全文
posted @ 2020-02-05 10:24 MQFLLY 阅读(140) 评论(0) 推荐(0)
摘要:背包问题 01背包 状态:f(i,j) 表示只能装前i个物品的情况下,容量为j的背包所能达到的最大总价值 状态转移方程: f(i,j)=max(f(i-1,j),f(i-1,j-w[i])+v[i]) 核心代码(滚动数组) 由于我们使用一维数组存储,则在求两个子问题时没有直接取出那么方便了,因为第i 阅读全文
posted @ 2020-02-04 20:07 MQFLLY 阅读(152) 评论(0) 推荐(0)
摘要:线性DP 考虑一组硬币面值 1,5,11 给定W,求凑出W的最少硬币个数 我们记凑出n需要用到的最少硬币数量为f(n) 我们注意到了一个很棒的性质 : f(n)只与f(n-1) f(n-5) f(n-11) 有关。 更确切的说f(n)=min(f(n-1),f(n-5),f(n-11)}+1 int 阅读全文
posted @ 2020-02-03 16:07 MQFLLY 阅读(174) 评论(0) 推荐(0)
摘要:线段树 什么时候用线段树 1.统计量可合并 2.修改量可合并 3.通过统计量可直接修改统计量 一句话:满足区间加法即可使用线段树维护信息 理解Lazy Tage 蓝色是要把信息及时维护的节点,红色是本次区间修改操作Lazy Tage下传停止的位置。 模板 Just a Hook HDU-1698 # 阅读全文
posted @ 2020-02-03 14:12 MQFLLY 阅读(147) 评论(0) 推荐(0)
摘要:最短路 1.Floy 复杂度O(N3) 适用于任何图(不存在负环) 模板 --kuangbin #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int INF = 0x3f3f3f3 阅读全文
posted @ 2020-02-02 15:37 MQFLLY 阅读(180) 评论(0) 推荐(0)
摘要:简单搜索 1.DFS UVA 548 树 1.可以用数组方式实现二叉树,在申请结点时仍用“动态化静态”的思想,写newnode函数 2.给定二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据后序遍历找到根,然后在中序遍历中找到树根,从而找出左右子树的结点列表然后递归 构造左右子树 3.注意 阅读全文
posted @ 2020-01-30 20:30 MQFLLY 阅读(144) 评论(0) 推荐(0)
摘要:Day2 二分 这里直接给出模板 两种对应不同的情况 可以借助数轴理解 int bsearch_1(int l, int r) { while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; else l = mid + 1; } r 阅读全文
posted @ 2020-01-27 20:12 MQFLLY 阅读(311) 评论(0) 推荐(0)
摘要:常用STL 1.优先队列 priority_queue 内部是用堆(heap)实现的 priority_queue<int> pq; 默认为一个“越小的整数优先级越低的优先队列” 对于一些常见的优先队列,STL提供了更简单的定义方法 例如:“越小的整数优先级越大的优先队列”可以写成“priority 阅读全文
posted @ 2020-01-27 19:54 MQFLLY 阅读(220) 评论(0) 推荐(0)