自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 收藏
  • 关注

原创 算法做题记录

求f[a][b][c][d][e]时,可以假设将最后一个人放到第12345排,放到第一排时,需要保证a至少为1,且a-1>=b。如果X与Y是同类,那么将X挂到Y上,并且更新PX离PY的距离为 d[y] - d[x] ,即表示X与Y为同类。若果X可以吃Y,那么将X挂到Y上,并且更新PX离PY的距离为d[y] - d[x] + 1,表示X可以吃Y。思路:先计算数字A,B在n级城市的哪一块,再计算在n-1级城市的x,y坐标,递归综合得到A、B的坐标。,N,其中第 i 号战舰处于第 i 列。

2023-09-05 21:08:55 478

原创 D. Bracket Coloring

一种颜色填充:保证任意位置左括号数始终大于右括号数(整个字符串是一个合法括号序列) 或者 保证任意位置右括号数始终大于左括号数(将整个字符串翻转,是一个合法括号序列)如果是右括号,那么判断栈顶是否为左括号,如果是左括号,那么就与栈顶的左括号匹配,一起出栈;对于每一个位置,那么如果前面左括号多,那么将它放到无需翻转的子串中,否则,放到需要翻转的子串中。2.对于任意位置i,i前的左括号数一定大于等于右括号数(即右括号数不大于左括号数)首先判断整个字符串是否是一个合法的括号序列,如果他不是,输出-1;

2023-06-24 18:25:08 554

原创 Acwing346. 走廊泼水节

思路:对于每条边,有两个顶点u、v,分别属于两个集合(假设集合内部点已经完成全连接),那么将这两个集合连接起来,需要连接s[u]*s[v]-1条边(s[i]代表i所在集合 点的数量),且这些边的最小值为(u--v边权)w+1。倘若有其他方案或更优方案,那么在上述连接过程中,在连接集合u和集合v时,一定会有一条边小于w+1,那么在选取最小生成树时,选这条生成的边而不选初始的边也可以获得 最优/更优解,这与题意不符,因此可以确保取到最小。连接顺序:将所有边按照边权大小从小到大排序。2.为什么可以确保取到最小?

2023-06-19 09:46:24 448

原创 Acwing128. 编辑器

思路:分别用两个栈,记录光标左边的数和光标右边的数;用s记录前缀和,f记录最大前缀。对于前k个数的最大前缀,可能等于前k-1个数的最大前缀 或者 前k个数的和。即:f[k]=max(f[k-1],s[k])3.光标左移:将L栈的顶部元素push到R栈。4.光标右移:将R栈的顶部元素push到L栈。2.删除操作:删除L栈的顶部元素。1.插入操作:将x插入到L栈中。5.查询操作:输出f[k]

2023-06-19 09:21:13 536

原创 Acwing167. 木棒

1.拼的木棍条数越多,每条木棍的长度越短,且最多可以拼成n条木棍(即每根木条一样长)。3.如果拼当前木棍时,放入长度为fail的木条没有拼成功,那么就不要再对长度为fail的木棍进行搜索。2.如果当前搜索拼成木棍的条数已经超过期望的条数,return false;2.如果这条木棍拼好了,但剩余的木条无法拼成木棍,return false;同小猫过河,每次选一根短木条,放在前面没有拼好的木棍中,或者新开一条木棍。对所有木条遍历,先拼好一根木棍,再拼下一条木棍。4.对木条从大到小排序,先放长度大的木条。

2023-05-22 18:21:33 105

原创 Acwing166. 数独

每次填数时,先选取一个可选数字最少的位置填,这样可以为其他选择多的位置增加约束,以减少搜索次数。这里也是用一个二进制数来表示,有多少个数是可以选的,如果第i个位置为1,那么 i 可以被选。1.行约束、2.列约束、3.九宫格约束。

2023-05-22 18:10:12 82

原创 Acwing165. 小猫爬山

1、从1~cnt辆车中,选择一辆将它放进去不会超重的车放进去;1、如果当前开的车比最优解多了 return;2、将小猫从大到小排序,先放重量大的。2、新开一辆车将它放进去。

2023-05-22 18:02:40 78

原创 Acwing164. 可达性统计

思路:先对所有结点做一个拓扑排序,入度为0的结点(即最靠后)肯定只能到达自己,因此从后向前遍历,每个结点可以到达的结点就是他自己+他的后继可以到达的结点,这里用一个二进制数f表示一个点可以到达哪些结点,第i位为1代表可以到达第i个结点。所以只需将所有后继结点的f值异或起来,就可以得到该结点可以到达哪些结点。标签:拓扑排序+位运算。

2023-05-22 17:59:53 67

原创 天梯赛 L2-043 龙龙送外卖

假设龙龙每次送完外卖都回到原点,即他走的路程就是 每个点到已经访问过得点的距离*2 的总和。最后一次可以不返回原点,因此最终减掉一个离原点最大的距离。dfs : 返回x点到已访问过结点的最短距离。dfs2 : 返回x点到原点的距离。

2023-04-13 15:39:02 508 1

原创 天梯赛 L2-011 玩转二叉树

首先要明确建树过程,先序遍历的第一个结点一定是根节点,在中序遍历中找到这个结点,那么他的左边就是他的左子树,右边就是他的右子树,只要找到子树的范围,就可以递归调用。其次,要明确他的翻转过程,其实就是求出层序遍历后,将他每层倒着输出,所以总着来说就知识一个已知先序中序遍历,求层序遍历的问题。这里用tr[i] 保存每个位置上的结点的值,如果为0,则表示该位置为空。这个代码为了理清思路,很多地方写的有些亢余。

2023-04-11 09:04:14 201

原创 天梯赛 L2-002 链表去重

当遇到重复元素时,将这个结点插入l2,并且l1中最后一个结点的next值应被修改为当前结点的next值(因为这个结点被删了),l2最后一个结点的next值为当前结点的address。思路:用静态链表存储,从头到尾遍历一遍链表。当遇到不重复的元素时,将这个结点插入l1;2.printf格式化输出。1.要判断l2是否为空。

2023-03-23 17:36:38 136

原创 101. 最高的牛

注意点:有数据点有重复相望的牛,如果对重复的数据都进行操作的话,就会导致他俩中间的牛最大高度会被多减去一个1,因此在操作前要先判重。当得到一组牛可以相望时,可以将他俩中间的牛的高度都减去1,这样就可以保证他俩可以相望。可以先假设,所有牛都一样高。利用差分数组可以很好计算。

2023-02-21 22:47:18 232 1

原创 100. 增减序列

最终数组的方案数可以这样理解,前几次操作要尽量挑选一对bi(一个为正,一个为负),剩下多于的(可能为正,可能为负),可以将多于的与b1配对操作一次,也可以不与b1配对自成一组操作一次,所以,b1可能被操作的次数为0~abs(pos-neg) (多于数的和)现在的目标为将 b2 ~ bn 都变为0 , 每次操作可以任选两个数 ,一个数 + 1 ,另一个数 -1;将所有小于0的bi 转化为0 的最小操作次数为他们的和的相反数。因此将所有大于0的bi 转化为0 的最小操作次数为他们的和。

2023-02-21 22:44:05 80

原创 97. 约数之和

【代码】97. 约数之和。

2023-02-21 22:34:40 71

原创 95. 费解的开关

思路:先学习黑白迭代游戏玩法,先枚举按第一行的所有情况,然后当上一行有没有点亮的灯时,一定要按这个灯正下方的灯;反之,如果这行的某个灯正上方的灯已经点亮,那么一定不能按这个灯,否则上面的灯就会熄灭,且在以后的操作中无法再次被点亮。因此枚举第一行turn的所有情况,然后模拟后四行,判断最终有没有将所有灯都点亮,若点亮,则判断是否需要更新最小次数;

2023-02-21 22:19:15 80

原创 P8756 [蓝桥杯 2021 省 AB2] 国际象棋

从1~m行遍历,首先先遍历第i行的前两行的状态 a b,判断 a b 是否冲突,若冲突,则continue;否则,计算第i行放置的棋子个数t,f[i][b][c][j]+=f[i-1][a][b][j-t];(即i-2行状态为a,i-1行状态为b,可以转移到第i行状态为c的情况)。设置 f[i][a][b][k] 数组 表示 第 i - 1 行状态为 a ,第 i 行状态为b 的方案数 , 最终方案数为所有。f[m][i][j][k]的和。

2023-02-20 19:42:04 149

原创 P8685 [蓝桥杯 2019 省 A] 外卖店优先级

每次处理订单消息时,先计算这天的前一天他的优先度,判断他是否出队,再加2得到这天的优先度,判断他是否入队。处理完所有订单后,计算所有店在 t 时刻的优先度,并判断他们是否在队列中。思路同领接表,开一个head数组存储上一次外卖店 i 接到订单的时间。

2023-02-20 08:48:09 279

原创 P8683 [蓝桥杯 2019 省 B] 后缀表达式

若减号多于负数个数,消去减号的方法: a - ( b - c - d ) (其中c,d为正数,b为负数)3.有减号时,且所有数都为负数,那么必须有一个数打头,仍是负值,其余数取绝对值。4.有减号时,且所有数中有正有负,那么选一个正数打头,即所有数都可以去绝对值。若a,b,c为负数,将其转化为正值方法:d - ( a + b + c )2.有减号时,且所有数都为正数,那么必须减去一个数,因此减去最小值。因此只要至少有一个减号,就可以把所有负数变为正数(全为负数时除外)1.当没有减号时,所有数都取正值;

2023-02-20 08:42:15 142

原创 P8669 [蓝桥杯 2018 省 B] 乘积最大

当k为奇数时,可以先选一个最大值,然后再两两选数。每次选一组(两个)数,两数乘积必为非负数。1.所有数都选,且数组中有奇数个负数。其余情况结果应一律为非负数,分析如下。2.所有数都是负数,且要选奇数个数。当k为偶数时,结果必为非负数;什么情况结果可能为负数。

2023-02-20 08:33:24 258

原创 Acwing 4655. 重新排序

思路:先读取区间,计算每个位置被统计的次数,让被统计次数多的位置填上尽可能大的数。重排后的和,即可将数组排序、统计次数排序 相乘求和可得。因此直接计算重排前的和,可以通过前缀和差分快速求得。

2023-02-14 22:08:21 106

原创 Acwing 4654. 消除游戏

暴力模拟,判断每一个字符是否可以留下(不是边缘字符),若留下的字符串与原字符串相等,那么break结束。

2023-02-14 22:02:33 240

原创 Acwing 4653. 数位排序

思路:写一个自定义排序即可。

2023-02-14 22:00:34 69

原创 P8708 [蓝桥杯 2020 省 A1] 整数小拼接

然后,若a与e拼接的数(ae)比k小,那么ab、ac、ad都应该比k小(他们符合单调递增规律),因此只需找到a在前时,与最后一个与a结合小于k的数,这里可以用二分法提高效率。注意点:若找到最后一个与a结合小于k的数e,此时要注意减去aa这种情况,因为要选两个整数拼接,不可以选取同一个数。首先,要对数组a排序,并用len数组记录拼接后,若这个数放在后面,那么另一个数要乘的倍率。

2023-02-11 23:53:21 465 1

原创 P8755 [蓝桥杯 2021 省 AB2] 负载均衡

对每个任务进行处理时,先判断此时刻有没有算力释放,再判断是否有足够算力完成任务,若有,则减去相应算力,并记录该任务何时完成,会释放多少算力;思路:记录每个机器此时的算力,并开一个数组,记录该机器何时会释放多少算力。收获:v.erase() 会有返回值,返回要删除的下一个迭代器。

2023-02-11 23:37:48 164

原创 P8754 [蓝桥杯 2021 省 AB2] 完全平方数

思路:从1~n遍历n的因子,如果该质因子的幂为奇数,则因再乘以此质因数,才可以使n变为完全平方数。

2023-02-11 23:31:22 258

原创 P8753 [蓝桥杯 2021 省 AB2] 小平方

注意:小于 n/2 这个值可以有小数,因此先将n转化为浮点数再判断。同理,也可以先判断n的奇偶性,再分情况判断。

2023-02-11 23:21:51 200

原创 P8752 [蓝桥杯 2021 省 B2] 特殊年份

收获:取一个整数的某一位:先除以 10^ 位数-1 ,再取余10。

2023-02-11 23:18:44 174

原创 P8744 [蓝桥杯 2021 省 A] 左孩子右兄弟

思路:每个结点的最大深度 就为父节点的最大深度+父节点的子节点数用 f[N] 数组表示最大深度。

2023-02-10 22:14:48 84

原创 Acwing 3424. 最少砝码

n个砝码:1 、 3 、 9 、 ... 、3^n 可以表示1+3+9+...+3^n。3个砝码:1、3、9 可以表示 1 ~ 13。2个砝码:1、3 可以表示 1 2 3。1个砝码:1 可以表示1。

2023-02-09 20:49:58 52

原创 P8783 [蓝桥杯 2022 省 B] 统计子矩阵

若 [l , r] 不符合条件,那么[l , r + k ]一定不符合条件,进行l++再判断。若区间[l , r]符合条件,那么他的子区间也符合条件,符合的区间数为 r-l+1 个。先确定上下边界x,y,再确定左右边界l,r,在确定lr时,可以用双指针法。这样只需O(n)时间复杂度就可确定处lr边界。

2023-02-09 20:34:47 209

原创 P8613 [蓝桥杯 2014 省 B] 小朋友排队

思路:每个小朋友需要交换的次数=前面比他高的人数+后面比他矮的人数。用树状数组tr【i】记录身高小于i的人的个数。

2023-02-09 20:28:31 117

原创 P8748 [蓝桥杯 2021 省 B] 时间显示

注意点:开long long。思路:取余求时间即可。

2023-02-07 23:42:12 94

原创 P8686 [蓝桥杯 2019 省 A] 修改数组

如果f[i]==i,表示i还没有出现过,可以使用i,同时更新f[i]=Find(f[i+1])维护f【i】数组,代表读到数字i,i可以变成的第一个合法的数字。

2023-02-07 23:39:36 195

原创 P8663 [蓝桥杯 2018 省 A] 倍数问题

注意点:简单的三层循环顺序得到的不一定是和为最大值的情况如:10,9,8,7,110+8+7 是大于 10+9+1 的。

2023-02-07 23:33:41 282

原创 P8807 [蓝桥杯 2022 国 C] 取模

反证法:若不存在这样的一组x,y,使n%x==n%y,那么。

2023-02-06 22:54:30 184

原创 P8781 [蓝桥杯 2022 省 B] 修建灌木

最大间隔为修剪完这个灌木后向左修剪 或 修剪完这个灌木向右修剪 然后折回来。计算两次修剪同一灌木的最大间隔。

2023-02-06 22:39:31 197

原创 P8682 [蓝桥杯 2019 省 B] 等差数列

思路:先找到数列的最小值和最大值,每个元素与最小值的差值就为kd,那么公差就是这些差值的最小公因数,项数为(最大值-最小值)/ 公差 + 1。

2023-02-06 22:34:46 245

原创 P8742 [蓝桥杯 2021 省 AB] 砝码称重

注意点:由于每个重量的砝码只有一个,所以在处理一个砝码时只能更新一次,可以用二维数组表示f,记录上一层f的状态。2.若w > m ,那么 w-m 也可以被表示(将m放到物品栏,w放到砝码盘)3.若w < m,那么m-w 也可以被表示 (将m放到砝码盘,w放到物品盘)遍历所有可能的重量,若某重量w可以被表示,则分为一下几种情况。维护f数组,f[i]=true 代表 i 可以称出来。这里用队列记录需要更新的重量,当遍历结束后,统一更新。1.w+m也可以被表示(将w和m都放到砝码盘)当放一个重量为m的砝码。

2023-02-06 22:31:38 397

原创 P8635 [蓝桥杯 2016 省 AB] 四平方和

思路:将ab、cd分为两组,先遍历a,b,记录一个三元组(a,b,a*a+b*b);再遍历c,d,设t=n-a*a-b*b,那么现在就要找一个a*a+b*b=t的三元组注意点:如果a*a+b*b的三元组已经被创建,那么就无需再创建了(因为要保证字典序最小)

2023-02-06 22:18:47 207

原创 P8772 [蓝桥杯 2022 省 A] 求和

每增加一个数(假设是第n个数),答案增加的值为a[n] * sum(a[0]~a[n-1])

2023-02-06 22:09:15 271

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除