
日常训练
文章平均质量分 60
chp的博客
这个作者很懒,什么都没留下…
展开
-
AcWing 851. spfa求最短路&&AcWing 852. spfa判断负环—spfa算法
spfa算法是对bellman-ford算法的改进,bellman-ford算法比较笨,要遍历所有边来更新,其实如果当前点没有被更新的话,就不用用当前点来更新他所连接的点了。我们只需要每次更新一个点后,继续更新该点连接的点即可。正如bellman-ford算法中提到的,一个点到其余点的最短路径,最长需要经过n-1条边,所以如果有大于等于n条边,则说明一定有环。注意从单元点出发,有可能找不到环,因为环不一定在最短路径上。原创 2024-01-06 15:29:01 · 591 阅读 · 0 评论 -
AcWing 853. 有边数限制的最短路—bellman-ford算法
优秀的地方,但是要注意的是能解决带负权边的最短路问题,如果负权边构成了负权回路,那就有可能求不出来了。需要注意的是,我们可以把n轮更新,理解为,1号点经过不超过n条边到达其余点的最短距离。bellman-ford算法可以用来解决带负权边的最短路问题,这是相比于。另外我们可以发现,在无环的情况下,1号点到其余点最长需要经过n-1条边。bellman-ford算法的主要思想是做松弛操作,类似于。如果需要要求边数为k,则遍历k轮即可。轮松弛操作,每次遍历。原创 2024-01-06 14:29:31 · 428 阅读 · 0 评论 -
学算法常用刷题网站
北大报送生,NOI金牌得主—yxc创办。: 杭州电子科技大学的在线评测系统。: 简称CF,俄罗斯的网站。: 北京大学的在线评测系统。:用户可以自己举办比赛。:找工作刷题必备网站。原创 2023-12-12 21:05:30 · 1026 阅读 · 2 评论 -
AcWing 1275. 最大数—线段树单点修改
拿区间[1,10]举例,可分为如图所示的小区间,由于这里和堆很像,所以也是用数组来存所有的点,最多不超过4n个区间。能使用线段树的题有一些特点,就是大区间的属性能从小区间得到,比如求max,max([1,10])=max{max([1,5]),max(6,10)},线段树一共有4个基本操作,分别是。线段树是以区间来考虑问题,保存的基本信息有区间的左边界、右边界、区间的属性(sum、min、max…:由两个子区间更新父区间,例如max([1,10])=max{max([1,5]),max(6,10)}原创 2023-07-25 17:01:24 · 194 阅读 · 0 评论 -
AcWing 239. 奇偶游戏—带边权并查集、带扩展域并查集解法
这道题比较有意思,可以由前缀和的思想来解决,[l,r]为偶数,说明[0,l-1]和[0,r]的奇偶性相同;[l,r]为奇数,说明[0,l-1]和[0,r]的奇偶性不同;扩展域的解法我是第一次遇到,大致的思想就是用并查集维护条件,当其中一个条件成立,那么集合中所有条件都应该成立。是一种带边权的并查集,维护当前节点相对父节点位置即可,食物链那道题有三种情况,同类、吃、被吃,这道题只有两种情况,奇、偶。原数据的范围是[0,n],开辟一个新的空间(域)来表示不同的情况。举个例子,假设题目中x,y的范围原创 2023-07-20 11:27:11 · 293 阅读 · 0 评论 -
AcWing1536. 均分纸牌 && AcWing122. 糖果传递—数学推导、贪心
A2的纸牌只能从A3获取,或者给A3不能从A1获取,或者给A1,因为A1==avg,这样做会使得操作重复(A1就是通过A2来达到avg的),这样我们就能知道当前的数Ai要通过Ai+1来达到avg。这道题看起来和上面的题很像,其实题意确实差不多,区别就是上一道题的两端和这道题的两端不同,这道题是一道环型均分纸牌问题,虽然改动了一点,但是解法却完全不同。,an从a1获得x1,其中x2,x3,…这道题有个特殊的地方就是A1只能从A2获取纸牌,或者A1只能将多余的纸牌给A2,此操作后A1的纸牌数应该为avg。原创 2023-07-16 16:09:18 · 518 阅读 · 0 评论 -
AcWing 106. 动态中位数—对顶堆
这道题应该用树状数组、平衡树也能解决,这里用对顶堆来做,对顶堆能够用维护第。是固定的,在这道题中,维护两个堆,一个大根堆一个小根堆。原创 2023-07-15 17:10:07 · 290 阅读 · 0 评论 -
AcWing 107. 超快速排序—逆序对
我们思考冒泡排序在什么情况下会交换两个相邻的数,目标是升序序列时,当f[i]>f[i+1]时,会交换f[i]与f[i+1],交换后可以发现f[i]的逆序对数量减少了一个,所以就能往这方面想,最后可以发现逆序对的数量就是需要交换的最少次数。,但是主要是如何分析问题,如何能从问题中看出来和逆序对数量有关,现在的题目基本上很少是那种模板算法题了,更注重思维,所以一定要培养好思维,模板只是基础。思维很重要,或者说在熟知算法模板的情况下,更重要的就是思维了。这道题考查的算法不难,就只是利用。原创 2023-07-14 16:14:00 · 478 阅读 · 0 评论 -
AcWing 98. 分形之城—递归、分治
这是一道递归+坐标变换的问题,坐标变换比较难想,建议自己动手画一画容易明白一些。这一道题看起来很麻烦,其实就是比较麻烦。与总点数的关系,不难发现总点数。构成的规律,第1部分是关于。,同时可以发现,每个等级由。个区域的情况递归子问题即可。的城市构成,将每个等级为。个,观察可以发现城市由。相同,第4部分是关于。分别考虑当前点在城市的。原创 2023-07-05 15:43:20 · 170 阅读 · 0 评论 -
AcWing 97. 约数之和—算数基本定理、递归
是否是mod的倍数,这种情况就比较麻烦,如果题目比较友好,直接用公式+需要通过算数基本定理来解决问题,任何正整数。会超时,所有这里考虑用递归分治的方法来算。可以发现后一半每一项都是前一项对应位置的。为奇数,我们把这个写成整除的形式就是。就变成了奇数项,可以按照(1)来求,质因子分解,将质因子的指数再乘上。其实之前考虑的是用等比数列的公式。那么现在的问题就变成了如何快速求。一共有a_n+1,为偶数项,很大,考虑用递归分治来做,和逆元来算,但是需要判断。,但是有个问题,这里的。的范围较大,如果遍历算。原创 2023-07-04 15:33:21 · 176 阅读 · 0 评论 -
快速幂与64位整数乘法(位运算)
大数乘法与快速幂的思想类似,都需要转化为位运算,快速幂需要用到位运算的思想,求。转换成二进制的形式,假设。原创 2023-07-03 12:07:37 · 196 阅读 · 0 评论 -
状态压缩DP—最短Hamilton路径
【代码】状态压缩DP—最短Hamilton路径。原创 2023-06-26 11:27:13 · 193 阅读 · 0 评论 -
状态压缩DP—蒙德里安的梦想
【代码】状态压缩DP—蒙德里安的梦想。原创 2023-06-25 15:44:21 · 149 阅读 · 0 评论 -
高斯消元法解线性方程组
【代码】高斯消元法解线性方程组。原创 2023-06-21 13:29:20 · 265 阅读 · 0 评论 -
线性DP—最短编辑距离&编辑距离
这道题可以用线性DP来求解,线性DP的特点是每次只需要考虑最后一个状态。原创 2023-06-10 14:10:59 · 78 阅读 · 0 评论 -
动态规划之—状态机模型(股票买卖 IV、股票买卖 V)
这道题没有交易次数的限制,但是有了冷却时间,我们需要添加一维来表示冷却时间。首先画出状态机模型,有两种状态:手中有货和手中无货,手中有货可以继续保持,或者卖掉。手中有货可以继续保持,或者买入。原创 2023-04-24 14:49:18 · 432 阅读 · 5 评论 -
动态规划之—状态机模型(大盗阿福、没有上司的舞会)
这种需要向前看两步,所以为了方便我们遍历从2~n+1。这是一道比较简单的动态规划—状态机的问题,可以用。的思想或者DP状态机的思想来做。DP状态机来表示状态一般比较清晰。原创 2023-04-23 16:53:48 · 210 阅读 · 0 评论 -
多重背包问题的三种解法(转化为01背包、二进制拆分、单调队列优化)
这里考虑用单调队列优化,首先分析01背包与完全背包,进而推导出多重背包的单调队列优化。这时直接拆分为s份,转化为01背包问题求解会超时,考虑二进制拆分,二进制拆分参考。可以转化为01背包问题求解,将s个物品都看作单独的一个物品,时间复杂度为。原创 2023-04-21 16:39:05 · 980 阅读 · 0 评论 -
最长公共上升子序列LCIS
我们考虑对代码进行优化,可以在第二层循环中顺便求出A[i]>B[k]的最大值。由上面的这两个,我们来写最长公共上升子序列。原创 2023-04-19 12:39:18 · 238 阅读 · 0 评论 -
拦截导弹 & 导弹防御系统
第二个问题,可以用贪心的思想来做,每次新到的导弹,我们用当前导弹高度恰好大于等于该导弹高度的导弹系统去拦截,这样所用的导弹系统的数量是最少的。**分析:**这道题稍微复杂一些,因为有两种拦截导弹的可能,由于数据范围较小,可以直接暴力枚举每一种可能,第一个问题为输出最长递减子序列,由于导弹数在1000以内所以采用时间复杂度为。我这里求最长上升子序列和贪心的时间复杂度都为。** 代码如下:**原创 2023-04-17 10:34:38 · 3457 阅读 · 0 评论 -
容量有下限的二维费用背包问题—潜水员
这是一个二维费用的背包问题,背包容量有下界限制(氧、氮),求背包能装的最小价值(气缸重量)状态表示与状态转移如上图所示。原创 2023-02-10 13:07:14 · 220 阅读 · 1 评论 -
最长上升子序列、最长公共子序列、最长公共上升子序列(LIS、LCS、LCIS)
最长上升子序列、最长公共子序列、最长公共上升子序列(LIS、LCS、LCIS)原创 2023-01-31 15:26:29 · 460 阅读 · 0 评论 -
算法寒假打卡记录
用博客来记录寒假期间刷算法题的过程,督促自己刷算法题原创 2022-12-06 23:23:47 · 503 阅读 · 0 评论 -
2021第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组
原创 2021-04-18 18:12:59 · 883 阅读 · 0 评论 -
计算某年某月某天是周几
计算任意一天是周几,我们用例题来说明十三号星期五十三号星期五真的很不常见吗?每个月的十三号是星期五的频率是否比一周中的其他几天低?请编写一个程序,计算 N 年内每个月的 13 号是星期日,星期一,星期二,星期三,星期四,星期五和星期六的频率。测试的时间段将会开始于 1900 年 1 月 1 日,结束于 1900+N−1 年 12 月 31日。一些有助于你解题的额外信息:1900 年 1 月 1 日是星期一。在一年中,4 月、6 月、9 月、11 月每个月 30 天,2 月平年 28原创 2021-01-20 13:41:27 · 1518 阅读 · 1 评论 -
八数码问题
八数码题目描述在一个3×3的网格中,1~8这8个数字和一个“X”恰好不重不漏地分布在这3×3的网格中。例如:1 2 3X 4 67 5 8在游戏过程中,可以把“X”与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 X例如,示例中图形就可以通过让“X”先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下:1 2 3 1 2 3 1 2 3 1 2 3X原创 2021-01-18 16:37:21 · 479 阅读 · 1 评论 -
2020年第十一届蓝桥杯B组国赛试题C/C++
原创 2020-11-15 19:41:24 · 1378 阅读 · 1 评论 -
前缀和与差分
前缀和是数组下标之前(包括此项元素)的所有数组元素之和。前缀和一维前缀和b[i]=∑j=0ia[j]b[ i ]=\sum_{j=0}^i a[ j ]b[i]=∑j=0ia[j] ,b[i]=b[i−1]+a[i]b[ i ]=b[ i-1 ]+a[ i ]b[i]=b[i−1]+a[i]二维前缀和b[x][y]=∑i=0x∑j=0ya[i][j]b[ x ][ y ]=\sum_{i=0}^x \sum_{j=0}^ya[ i ][ j ]b[x][y]=i=0∑xj=0∑ya[i][j]原创 2020-10-28 09:16:42 · 125 阅读 · 0 评论 -
acwing 1221. 四平方和
题目传送门题意:对于每个整数都可以表示为四个非负整数的平方和(四平方和定理,又称为拉格朗日定理)要求给定非负整数n,输出四个非负整数a^2+b^2+c^2+d^2=n,输出字典序较小的四个数,且按从小到大排序,中间用空格分开。思路:先确定两个数在二分搜索另外两个数。#include<cstdio>#include<cstring>#include<a...原创 2020-02-04 10:16:10 · 237 阅读 · 0 评论 -
acwing 95. 费解的开关
传送门题意比较容易理解 数字“1”表示一盏开着的灯,用数字“0”表示关着的灯,游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态,是否可能在6步以内使所有的灯都变亮。分析:这类题目有一些共同特点,(1)要达到全亮的情况与改变灯的顺序无关(2)同一个灯最多改变一种状态,改变两种状态与不改变相同不满足要找最少步数的要求。这道题可以利用递推来做,枚举...原创 2020-02-03 15:35:19 · 259 阅读 · 0 评论 -
avwing 1209. 带分数
acwing 1209#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int maxn=15;bool flag[maxn];int s[maxn];int n;int ant=0;/...原创 2020-01-28 09:53:40 · 285 阅读 · 0 评论 -
CodeForces - 510B Fox And Two Dots
传送门题意:n*m个字母,判断能否成环。分析:成环至少需要四个相同字母,dfs一直往下搜索,每遇到相同字母将其标记,若遇到相同字母且被标记可判断已成环(此字母不能是上一个字母,因此要记录下此时的字母)。代码如下:#include<cstdio>#include<algorithm>#include<cstring>using nam...原创 2019-12-05 20:32:08 · 199 阅读 · 0 评论 -
个人训练赛3
A - Kefa and Park 题意:Kefa要到公园里的餐厅吃饭,也就是图的叶子节点,但是Kefa害怕猫,猫的位置已经给出。其中猫**连续**出现的次数不超过m次,Kefa便可通过这条路,问Kefa能到几个餐厅吃饭。分析:此题是典型的dfs,遍历所有点即可。(比赛的时候没读懂连续m,加上对dfs不太熟悉就没做出来。。。。)代码如下:#include<cstdio>#...原创 2019-11-26 22:36:44 · 167 阅读 · 0 评论 -
被鸽了的美男老师K
题目链接分析:这道题有点像 蚂蚁过绳这道题,但是这道题和蚂蚁过绳还是有一些区别的。(看了大佬博客明白的)题目要求 如果两个同学发现在某一个整数时刻他们处在同一个整点那么他们都会向后转,如原来向右走的变成向左走,是允许存在多个同学在一起且不一定是相向而行。直接上代码,代码比较容易理解。#include<cstdio>#include<iostream>#incl...原创 2019-11-20 21:50:55 · 174 阅读 · 0 评论 -
Odd Sum Segments CodeForces - 1196B
题目传送门分析:题目意思是给你n个数,判断能否分为k份且每份的和为奇数;如果不能分 output NO;能分的话 output YES , 并且输出每个区间右端分法为 [1,r1] , [r1+1;r2] , [r2+1,r3] ,…, [rk−1+1,n],需要注意的是最后一个一定是n;讨论如何分,奇数相加为偶数,所以我需要保证每个区间最少一个奇数,就让每个区间只有一个奇数,那么剩...原创 2019-11-20 19:44:35 · 171 阅读 · 0 评论 -
RGB Substring (hard version) CodeForces - 1196D2
题目传送门分析:此题用到了前缀和,能够降低时间复杂度,代码比较容易理解#include<cstdio>#include<iostream>#include<algorithm>#include<string.h>#include<cstring>using namespace std;const int maxn...原创 2019-11-19 21:43:45 · 158 阅读 · 0 评论 -
训练赛二
题目链接B. 签到题,N-K+1;#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<string>using namespace std;int main(){ int n,m; scanf("%d%d"...原创 2019-11-18 19:45:09 · 142 阅读 · 0 评论 -
RGB Substring (easy version)
题目传送门分析:数据的范围较小,可直接遍历整个母串,记录下每次的最小值,选出最小值即可代码如下,比较容易看懂#include<cstdio>#include<algorithm>#include<cstring>#include<string>using namespace std;const int maxn=1e9;in...原创 2019-11-15 21:27:57 · 244 阅读 · 0 评论 -
wave hdu-6570
题目链接题解链接#include<cstdio>#include<algorithm>#include<cstring>#include<map>#include<vector>using namespace std;vector<int> v[105];int main(){ int n,c...原创 2019-11-12 21:32:23 · 184 阅读 · 0 评论 -
训练赛一
训练链接D.分析:按照题意是求两交替且各自相同的子序列,用vector存每个数出现的不同位置,两个for循环遍历,每次取出i,j,now用于定位当前交替进行位置,x1,x2分别定位i,j,位置。#include<cstdio>#include<algorithm>#include<cstring>#include<map>...原创 2019-11-12 19:57:41 · 145 阅读 · 0 评论