随笔分类 - 算法合集
本人学算法的过程
摘要:例如:当前数字只能由1,4,5构成,问在所有的数中,满足这种性质的第n个数是多少 考虑进制:数字只能由1,4,5构成,换句话来说和只能由0,1,2构成同理,只不过最后是把012换成了145 所以可以直接把这个数换成3进制,然后对应输出即可,任何相关的都可以用进制来解决 C - Even Digits
阅读全文
摘要:本文仅用于笔者关于反悔贪心的学习笔记,反悔贪心是笔者在一场 $div3$ 中遇到的问题,故来学习一番 本篇文章概念部分来源于【学习笔记】反悔贪心 - Koshkaaa (cnblogs.com)但是对于题目讲解以及贪心策略思路讲解均由笔者著,另加了部分例题作为参考 什么是反悔贪心? 贪心本身是没有反
阅读全文
摘要:如何判断某个位置是不是LIS或者反LIS的数? 笔者是在前几天的abc354这一场的f题发现的,最长上升子序列很显然,我们在求的过程中,设 \(dp[i]\) 为以i位置结尾的最长上升序列的长度,然后求一边所有的最长长度即可,那么对于这种定义,我们考虑一个反定义,即:\(dp2[j]\) 为以j位置
阅读全文
摘要:Coloring Brackets 一道区间DP好题 一开始以为有多种不同的括号匹配次序而导致自己一头大雾wuw,首先看到括号匹配就要想到用栈来求出每个括号对应的匹配项,对于一个区间来说,其左括号一定是具有与之对应的右括号存在时染色才有意义,所以我们要求出每个括号对应的位置\(should[i]\)
阅读全文
摘要:先把例题模在这里,之后更新 P1272 重建道路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) P2014 [CTSC1997] 选课 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) P2015 二叉苹果树 - 洛谷 | 计算机科学教育新生态 (luogu.co
阅读全文
摘要:A-Buildings 保存第一个建筑的高度,然后只要后面出现比它高的输出即可。 #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; signed main
阅读全文
摘要:P2015 二叉苹果树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 屮,一开始想当然的以为剪掉了其中一个边,其子树部分全部都会脱落,没想到剪掉一个边紧紧只是剪掉一个边,子树不会消失 很明显的,我们要考虑树形$dp$,因为剪掉哪条边是不确定的,那么暴力求的话,每条边都剪或不剪,时
阅读全文
摘要:P2324 [SCOI2005] 骑士精神 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 主要在于 $A*$ 函数中估价函数,这里给出最好想也是我想出来的一种方法,也就是当黑白棋子各自都在对方的领域上,那么就可以考虑一种最小的消耗情况,也就是走一步顶两步,也就是黑白互换,那么此时
阅读全文
摘要:树状数组三倍经验 P1637 三元上升子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Enemy is weak - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) The Battle of Chibi - 洛谷 | 计算机科学教育新生态 (luogu.co
阅读全文
摘要:先挂个板子: #include <bits/stdc++.h> #define int long long using namespace std; const int N=1e6+10,mod=1e9+7; mt19937 sj(114514); struct node{ int l,r,key,
阅读全文
摘要:扩展欧几里得: 最大公约数 - OI Wiki (oi-wiki.org) int exgcd(int a,int b,int &x,int &y){ if(!b){ x=1,y=0; return a; } int d=exgcd(b,a%b,y,x); int tmp=x; x=y; y=tmp
阅读全文
摘要:什么时候用分块? 当你发现正常数据结构无法解决的时候(比如维度特别多,很不方便或者炸空间),或者复杂到要3个 $log$ 以上才能解决时。(主要还是得看数据范围,分块的做法一般都是 $O(\sqrt{n})$ 及以上的 如何分块? 定一个块长 $B$ ,整个序列就会被分成 $\floor{n/B}$
阅读全文
摘要:单调队列: P1886 滑动窗口 /【模板】单调队列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 二维单调队列: 0子矩阵 - 蓝桥云课 (lanqiao.cn) LCA:P3379 【模板】最近公共祖先(LCA) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn
阅读全文
摘要:Kruskal重构树,即与瓶颈树类似,kurskal重构树的特性是,任意两点之间的简单路径种的(最大或最小)边权值为其最近公共祖先 Kruskal算法首先给出一张有向图,让我们求最小生成树(用总权值最小的一些边的集合,使得所有点都能互通,很明显n个点会有n-1条边) kruskal算法思想是先把所有
阅读全文
摘要:对于最短路径树SPT,首先给你一张正权无向图,源点任意,然后要求你删除或者选择全部边的某些边,使得尽可能多的保持两点之间的最短路径,输出边的编号即可 首先从源点跑一遍最短路,在最短路中我们需要记录一个东西,还记得怎么输出路径嘛?是不是在遍历的时候记录一个$pre$数组即可?同样的,我们把这些前驱点保
阅读全文
摘要:以为自己一辈子接触不到的算法,本来以为很高深,没想到是优雅的暴力,太绝妙了 对于多个区间查询,例如区间最大值等,我们考虑暴力,枚举区间 $[L,R]$,取最大值即可,时间复杂度 $O(m*(R-L))$,跑不起,所以我们借用数据结构,单调队列,树状数组等等,但是如果此时我们考虑优化暴露 首先我们这样
阅读全文
摘要:文章借用: 浅谈数论分块 - 洛谷专栏 (luogu.com) 求 $\sum_{i=1}^n \lfloor\frac{n}{i}\rfloor$,其中 $n$ 为常数。 为了方便我们的研究,我使用绘图软件画出了 $f(x) =\frac{7}{x}(1\leq x\leq 7)$ 的图像,也就是
阅读全文
摘要:对于矩阵快速幂,其作用能够达到快速递推公式的作用 这里先定义一个矩阵 struct martix{ int x[105][105]; martix(){memset(x,0,sizeof x);} }; 首先看如何进行矩阵计算,由线性代数知: martix cacl(martix a,martix
阅读全文
摘要:裴蜀定理内容: ${ax+by=c,x\in Z^*,y\in Z^*}$成立的充要条件是${\gcd(a,b)|c}$。$Z^*$表示正整数集。 设${s=\gcd(a,b)}$,显然${s|a}$,并且${s|b}$ 又因为${x,y\in Z^*}$ 所以${s|ax,s|by}$显然要使得之
阅读全文
摘要:接下来的一个月的时间内准备一天完成6道题 具有针对性的完成 五道题大致为下: 1. 一道CF 1400~1700 2. 一道背包dp(背包完成后会针对性的进行其他的动态规划) 3. 一道图论(单源,多源最短路, 最小生成树,差分约束,树的重心,求最长路以及最短路,拓扑排序) 4. 一道数论(gcd,
阅读全文