02 2024 档案
摘要:E. Power of Points 题解参考 #include <bits/stdc++.h> #define int long long #define rep(i, a, b) for(int i = (a); i <= (b); ++i) #define fep(i, a, b) for(i
阅读全文
摘要:目录ABCDEFGHIJKL A n的范围很小暴力直接 直接做就行。 我还傻的统计了一下前后缀,不过怎么写都行这道题。 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a)
阅读全文
摘要:A 两种情况 两个字符相同只有2 两个字符不相同4 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a); i <= (b); ++i) #define fep(i,a,b) for(int
阅读全文
摘要:目录写在前面要说floyd就不能只说板子状态转移空间优化kij or ijk应用求多源最短路求传递闭包求无向图的最小环恰好经过k条边的最短路径 写在前面 在做洛谷的树上dp题单的时候遇到了一道题目P1613 跑路发现自己对flyod的理解太浅薄了,于是去重新学习了一遍,又做了几道题目,然后结合了ac
阅读全文
摘要:目录ABCDEG A 统计A、B输出 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a); i <= (b); ++i) #define fep(i,a,b) for(int i = (a
阅读全文
摘要:目录ABCDEF A 第一个遇到连续两个荆棘的地方就不能再赢金币了。 所以统计连续两个荆棘之前的所有金币 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a); i <= (b); ++i)
阅读全文
摘要:目录写在前面1. A. Did We Get Everything Covered?(构造、思维)题目链接题意题解代码总结2 F. Greetings(离散化+树状数组)题目链接题意题解代码总结3. B. Milena and Admirer(贪心、小结论、思维)题目链接题意题解代码总结4. C.
阅读全文
摘要:目录ABCD A 输出最大值减最小值,或者排序算一下答案 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a); i <= (b); ++i) #define fep(i,a,b) for(
阅读全文
摘要:目录负环spfa找负环方法一方法二实际效果 负环 环内路径上的权值和为负。 spfa找负环 两种基本的方法 统计每一个点的入队次数,如果一个点入队了n次,则说明存在负环 统计当前每个点中的最短路中所包含的边数,如果当前某个点的最短路所包含的边数大于等于n,也说明存在负环 实际上两种方法是等价的,都是
阅读全文
摘要:目录从Bellman-Ford开始核心思想模拟算法执行过程时间复杂度模板spfaspfa优化的思想模板 从Bellman-Ford开始 对于所有边权都大于等于0的图,任意两个顶点之间的最短路,显然不会经过重复的顶点或者边。也就是说任意一条最短路经过的定点数不会超过n个,边不会超过n-1条边 而对于有
阅读全文
摘要:分层最短路用更加具体或者形象一点的说法就是有限制的最短路径问题。 通常是拆点解决问题,原图中的点加上一个当前点的状态,成为一个新的点 P4568 [JLOI2011] 飞行路线 P4568 [JLOI2011] 飞行路线 #include <bits/stdc++.h> #define int lo
阅读全文
摘要:目录写在前面一些概念算法步骤字典序最大/最小的拓扑序列?模板例题3704. 排队家谱树奖金P1983 [NOIP2013 普及组] 车站分级1639. 拓扑顺序 写在前面 昨晚cf div3的F就是一道基本上可以说板子的拓扑排序的题目,没有做出来感觉图论很早之前就看了,但是基本没有刷过什么题,开始补
阅读全文
摘要:目录ABC题D题E题 A 签到 #include <bits/stdc++.h> #define rep(i,a,b) for(int i = (a); i <= (b); ++i) #define fep(i,a,b) for(int i = (a); i >= (b); --i) #define
阅读全文
摘要:目录题面链接题意题解代码总结 题面 链接 C. Little Girl and Maximum Sum 题意 给q个[l,r]将所有这些区间里面的数相加和最大。 可以进行的操作是任意排列数组 题解 对出现的每个区间内的位置加上1,代表权值 操作完之后求一遍前缀和,得到每个位置的权值 然后贪心的考虑,
阅读全文
摘要:目录题面链接题意题解代码总结 题面 链接 E. Tetrahedron 题意 从一个顶点出发走过路径长度为n回到出发点的方案总数 题解 考虑dp :走了i步,现在在j点的方案总数 转移: \(f[i][0]=f[i-1][1]+f[i-1][2]+f[i-1][3]
阅读全文
摘要:题面 链接 B. Plus and Multiply 题意 给定 可以进行的操作 最开始的数是1 问能否经过上面的两种操作将1变为n 题解 这题的关键是能不能想出来这个集合里面的数的统一的表达形式 所有数都可以表示为 然后只要
阅读全文
摘要:@目录题面链接题意题解代码总结 题面 链接 C. Kefa and Park 题意 求叶节点数量,叶节点满足,从根节点到叶节点的路径上最长连续1的长度小于m 题解 这道题目主要是实现,当不满足条件时直接返回。 到达叶节点后统计答案,用vector存图的话,无向图时,叶节点的边只有一条,也就是\(g[
阅读全文
摘要:目录题面链接题意题解代码 题面 链接 B. Equalize 题意 给一个数组 ,然后让你给这个数组加上一个排列,求出现最多的次数 题解 赛时没过不应该。 最开始很容易想到要去重,因为重复的元素对于答案是没有贡献的。 去重后排序。,然后维护一个极差小于n-1的区间,,区间长度就是可能的答案。
阅读全文
摘要:目录题目链接题意题解代码 题目链接 C. Digital Logarithm 题意 给两个长度位 的数组 、 ,一个操作 定义操作 为, 的位数 求最少多少次操作可以使 两个数组变得完全相同 题解 性质:
阅读全文
摘要:如果在遍历set的时候去erase很容易出事 事故代码: multiset<int>a; for(auto it=a.begin();it!=a.end();it++){ a.erase(it); } 原因:我们删除了it之后指针不知道下一个位置应该去哪了,就寄。 两种比较正确的写法是 multis
阅读全文
摘要:很意思的一道构造题 题意:给一个 ,让构造长度为n的数组满足,子数组为整数的个数为k个,负数的为 ,每个数的范围为 这种构造题可以考虑就是前一段可以一直用一样的、最小的。 我们观察可以发现\(k+k-(n+1)* n/2= (
阅读全文
摘要:这道题目比较经典,或者说这种思想比较经典。 这种筛法的思想。 我们正着想对于每一个 都分解一遍质因数显然是来不及的时间复杂度达到 我们考虑对于每一个1e6以内的质因数的个数 跑了一下程序是 个 素数定理告诉我
阅读全文
摘要:目录埃氏筛线性筛 埃氏筛 埃氏筛是一种筛素数的方法,埃氏筛的思想很重要,主要是时间复杂度 朴素的埃氏筛的时间复杂度是 这个复杂度是调和级数 vector<int>p; int vis[N]; void solve() { rep(i,2,n){ if(!vis[i]) p.p
阅读全文
摘要:目录容斥原理的引入从集合的角度考虑推广例子不被2、3、5整除的数错排问题求不定方程的解Devu和鲜花 容斥原理的引入 从一个小学奥数问题引入: 一个班级有50人 喜欢语文的人有20人 喜欢数学的人有30人 同时喜欢语文数学的人有10人。 问题: 两门都不喜欢的有多少人 至少喜欢一个的有多少人 至少喜
阅读全文
摘要:A. Watchmen 当欧几里得距离和曼哈顿距离相等时, 这两个条件满足其一。这和容斥原理一样,至少选择一个的条件。 我们可以计算xi,以及小于i之前的这些,这样可以保证只计算一次。 然后容斥一下计算答案。 #include <bits/stdc++.h> #d
阅读全文
摘要:目录ABCDEF A #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a); i <= (b); ++i) #define fep(i,a,b) for(int i = (a); i >=
阅读全文
摘要:目录ABCDEF A 按题意模拟即可 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a); i <= (b); ++i) #define fep(i,a,b) for(int i = (a
阅读全文
摘要:在vp cf的时候遇到的算法,当时看着就是题目很清楚,要不就是我不会的数据结果,要不就是算法,想了一会想不出直接去看题解了。现在补一下。 根号分治虽然名字里面有“分治”但实际上和分治的关系并不大,根号分治更多的还是一种思想。 根号分治的思想是将询问根据一个阈值设为 分为两部分。两个部分用不同
阅读全文
摘要:产生随机数的叫随机数生发器 生成随机数 const unsigned zseed=time(0); void solve() { //随机数生发器 mt19937_64 m{zseed}; //种子 rep(i,1,5) cout<<m()<<endl; return; } 重排序列 const u
阅读全文
摘要:目录ABCDEF A #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a); i <= (b); ++i) #define fep(i,a,b) for(int i = (a); i >=
阅读全文
摘要:我们只需要记录每个数结尾的数是多少(有点最长上升子序列的味道) 这种子序列的题目很多都是这样的,因为不需要连续很多时候我们只记录最后一个元素是多少。 我们将a[i]既可以放进t所在的子序列,也可
阅读全文
摘要:感觉分类讨论的能有点弱。遇到复杂一点的分类讨论的题目,代码就写的巨长。 首先观察到处在中间位置的1对答案的贡献是11,具体在中间哪个位置是没有关系的。 只有两端的两个位置是比较特殊的 所有我们考虑将最左端第一次出现的1放到
阅读全文
摘要:基本原理 树状数组的原理简单来说就是利用二进制拆分区间 我们可以对一个数进行二进制分解,最多分解成log(x)个数,同样我们可以对[1,n]这个区间进行分解。也是最多log段,每次修改时我们维护受到影响的区间,然后查询时用这log个区间拼凑出一个前缀。这就是树状数组的大概思想。 最基本的作用是动态维
阅读全文
摘要:A题 签到模拟即可 B题 单独考虑每一个a[i],如果i要是答案需要指针移动多少次,然后算完,排个序,指针移动最少的就是答案。 #include <bits/stdc++.h> #define int long long #define rep(i,a,b) for(int i = (a); i <
阅读全文
摘要:C++11中引入了lambda表达式,定义匿名的内联函数。 我们可以直接原地定义函数而不用再跑到外面去定义函数跳来跳去。 同时在stl的排序上也有作用。 [capture] (parameters) mutable ->return-type {statement} 下面逐一介绍各个参数的含义. [
阅读全文
摘要:目录stringsize/lengtherasesubstrpush_backpop_backclearfinddata\c_str string size/length 返回string中Char T元素个数 size_type size() const noexcept; size_type l
阅读全文
摘要:思路: 分类讨论: 当一个数字出现的次数大于等于k,那么最多有k个能被染色, 当一个数字出现的次数小于k,南那么这些数字都可能被染色 还有一个条件就是需要满足每个颜色的数字个数一样多,这里记出现次数小于k的所有数字的出现次数总和为sum,将所有这些数字排序后,前sum-sum%k个数字是都可以被染色
阅读全文
摘要:暴力枚举每一个端点然后去check 显然是复杂度为 是来不及的。 我们考虑大区间满足小区间一定满足,用两个指针维护一下当前满足不等式的区间,然后长度达到就计算答案。 思路很简单,主要是这类双指针的题目里面的一些细节需要注意 为了更好写我们总是先维护区间然后再计算答案,将维护和计算分
阅读全文