- 博客(32)
- 收藏
- 关注
原创 P8805 [蓝桥杯 2022 国 B] 机房
2.dfs(int x,int father)更新f[][](表示节点 i 的第2^j个祖先节点)、d[](深度)1.n台电脑用n-1条网线相连,任意两个节点之间有且仅有一条路径(拆分成各自到公共祖先节点的路径——lca);若不相等,则从大到小,如果f[][]不等,则更新两点,lca=f[x][0]朴素求法的改进版(朴素是一步一步跳,倍增是用f[][]优化,每次向上都是以其父节点为目标)(1)先将两点跳到同一深度(深度大的往上跳)(2)for(1~20)更新f[x][i](1)更新d[x]和f[x][0]
2024-05-15 21:08:26
441
1
原创 P8803 [蓝桥杯 2022 国 B] 费用报销
2.对天数进行排序,准备一个数组op[](保存距离第 i 张票据最近且间隔天数大于K天的票据编号),在DP中作为不选的方程来源(f[i][j] = f[op[i]][j-v]+v)具体做法:将每张票据给出的日期转换为在这一年中的天数,准备一个前缀和数组s[],记录第一个月到第i个月的天数,日期(m,d)= s[m] + d。2.对于第 i 张票据可选,那么选的上一张即第 i - 1张票据的日期应该在第 i 张的前K天。题意分析:从N张票据中选,且总价值不超过M的票据的最大价值(背包问题) + K天限制。
2024-05-11 19:46:37
559
1
原创 P8802 [蓝桥杯 2022 国 B] 出差
注意:优先队列默认大根堆,故要重载 <;且优先队列按优先级排序,对于 < 而言,a < b为true的意思是,右边的优先级大于左边,故应为return a > b;3.从源点开始,更新源点到与其邻接的点的距离,每次选出dis[]min且未访问的点进行重复上述步骤。很明显:单源最短路径 + 没有负权边 = dijkstra。2.邻接矩阵存图 + 一重循环(高举y总大旗!1.链式前向星存图 + prioroty_queue。dis[]:更新源点到各个点的距离。vis[]:标记是否访问。
2024-05-10 19:55:34
434
原创 P8801 [蓝桥杯 2022 国 B] 最大数字
1.a 操作:+1;b 操作:-1,对一个数位同时使用a和b,相当于不使用,故对一个数单独考虑使用a 或使用 b。思路:题目的意思,要让一个数最大,用贪心去考虑,从高位开始,对其进行a / b操作,使其变为9,可让该数最大。(1)当前数位的数是 x ,贪心一下,将其变为9,需要t = 9 - x次 a 操作。(1)贪心,将x变为9,对于b操作而言,只要在为0时,才能变成9,故需要的次数。(2)不够,那就不使用b,不然数反而变小。(2)剩余的 a 操作小于 9-x。(a、b可以不用完!
2024-05-07 18:46:55
221
原创 P8800 [蓝桥杯 2022 国 B] 卡牌
Y:定义一个变量,加上x - a[i](对于第 i 种牌,凑齐x套需要的空白牌数)判断x - a[i] <= b[i](对于 i 种牌,假设把空白牌用完,是否能凑齐x套)(2)判断需要的空白牌是否超出题目给的范围(if(s <= m))注意:一定一定一定记得开long long.....“最多” -- 二分。
2024-05-06 21:17:48
391
原创 P8799 [蓝桥杯 2022 国 B] 齿轮
2.倍数为1,单独处理(在输入数组时,若存在b[x]>=2,即至少存在两个相同的数,说明查询倍数为1时能找到答案)最右边的齿轮的转速是最左边齿轮的q倍 == 最右边的齿轮的半径是最左边齿轮的q倍。题目范围:查询次数q:2*10^5,数组范围2*10^5,所以不能边输入边查询。题意即为:查询数组中是否存在两个数,其中一个是另一个的q倍。预处理倍数数组ans[],查询时直接得出答案。1.遍历数组,看其 j 倍数是否存在。
2024-05-05 20:51:33
468
原创 P9422 [蓝桥杯 2023 国 B] 合并数列
当a < b,把a加给其后一个元素,弹出a。当b < a,把b加给其后一个元素,弹出b。当两个队列队首:a == b ,弹出。
2024-05-03 21:42:15
574
原创 蓝桥杯2023国B
情况2.3是一样的,但是对于2而言,只要>2,超出的部分必须都要修改;对于情况3,可以只修改一半的数量,如:1 2 2 2 2 3,a[4]、a[5]必须都要修改(因为对于2而言,已经有一对id=2出现了);当情况3的个数 > 情况2的个数,cnt += (情况3-情况2)/2+情况2。2.当a[id] > 2,需要改变的个数是a[id] - 2个。当情况3的个数 <= 情况2的个数,cnt = 情况2的个数。3.当a[id] == 1,需要改变的个数是1个。题目要求的是与 i 对应的是唯一的 j。
2024-05-03 20:50:53
437
原创 P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数
由于x = p^2*q^2,需要找的素数范围为sqrt(23333333333333)又由于p是素数,最小为2,故q最大为sqrt(23333333333333/4)当前数字为2时,处于dp[0],或者和dp[1]结合成dp[2];根据子序列:2,20,202,2023分为4个状态;m是表中最小的数,m就是素数,将表中所有m的倍数划去。当前数字为0时,和dp[0]结合成dp[1];当前数字为3时,和dp[2]结合成dp[3]2是最小的数,将表中所有2的倍数划去;3是最小的数,将表中所有3的倍数划去;
2024-05-02 21:33:46
1091
原创 洛谷题单-美国血统
2.通过前序找根节点、用这个根节点在中序中分左右。3.递归处理(重复步骤2),最后输出root即可。学到新知识:(有关字符串的各种处理)已知前序遍历和中序遍历,求后序遍历。1.后序遍历:左右根。
2024-04-26 21:31:42
178
原创 二叉树的存储方式
自上往下、从左至右给每个节点编号(适用于完全/满二叉树,否则空间浪费太多)对于i节点:其父节点(i/2),左孩子(i*2),右孩子(i*2+1)当题目未告知父子关系时,仅直到x y之间有边,把树当图存储,建双向边。当题目只给出了左右孩子节点,可以直接用二维数组存储,不必建树。数据域、左孩子指针、右孩子指针、(父节点指针)son[i][0]:i 节点的左孩子。son[i][1]:i 节点的右孩子。3.二维数组直接存储。
2024-04-22 21:33:22
199
原创 21年天梯赛L2-2
L2-2 病毒溯源病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而这些变异的病毒又可能被诱发突变产生第二代变异,如此继续不断变化。现给定一些病毒之间的变异关系,要求你找出其中最长的一条变异链。在此假设给出的变异都是由突变引起的,不考虑复杂的基因重组变异问题 —— 即每一种病毒都是由唯一的一种病毒突变而来,并且不存在循环变异的情况。
2024-04-15 21:50:36
263
1
原创 倍增LCA
一、前置知识:1.用链式前向星存储图2.dfs二、思想:1.寻找两个节点的公共祖先的朴素做法:从这两个节点向上遍历所有节点(dfs)但是在有多组询问时,时间复杂度大到爆炸...2.既然一步一步找太慢了,无法承受,那么才有二进制思想,每一次都往上走2的次方,于是...3.准备:两个数组(1)f[i][j]:i 节点向上走 2^j 步的祖先节点的编号(2)d[i]:i 的深度。
2024-04-10 21:25:11
142
1
原创 图存储的三种方式
适合稠密图O(V^2)对于权值:(1)有权图:INF表示不存在边、值表示权值(2)无权图:0表示不存在边,1表示存在边对于有向图、无向图:(1)有向图:存一遍(2)无向图:存两遍g[i][j] = g[j][i]
2024-04-09 21:38:35
378
1
原创 并查集算法
1.并查集:用于解决元素分组问题,管理一系列不相交的集合2.两个关键函数:合并 + 查询3.思想:f[i]:存i的父节点,令根节点的f[i]等于其本身合并时,将其中一个根节点的父节点设为另一个节点的根节点即可查询时,根据f[]判断,f[a] == f[b]
2024-04-09 20:53:02
187
1
原创 十三届蓝桥杯-砍竹子
4409. 砍竹子这天,小明在砍竹子,他面前有 n棵竹子排成一排,一开始第 i棵竹子的高度为 ℎi。他觉得一棵一棵砍太慢了,决定使用魔法来砍竹子。魔法可以对连续的一段相同高度的竹子使用,假设这一段竹子的高度为 H,那么使用一次魔法可以把这一段竹子的高度都变为,其中 表示对 x 向下取整。小明想知道他最少使用多少次魔法可以让所有的竹子的高度都变为 1。
2024-04-07 20:35:47
305
1
原创 十三届蓝桥杯-李白打酒加强版
话说大诗人李白,一生好饮。幸好他从不开车。一天,他提着酒壶,从家里出来,酒壶中有酒 2斗。他边走边唱:无事街上走,提壶去打酒。逢店加一倍,遇花喝一斗。这一路上,他一共遇到店 N次,遇到花 M次。已知最后一次遇到的是花,他正好把酒喝光了。请你计算李白这一路遇到店和花的顺序,有多少种不同的可能?注意:壶里没酒 (0斗) 时遇店是合法的,加倍后还是没酒;但是没酒时遇花是不合法的。
2024-04-06 21:24:45
280
1
原创 十三届蓝桥杯-积木画
1.动态转移方程中会用到i - 2,所以循环前,把f[0][]、f[1][]自行写出来,否则越界。看错题意了,还以为是图.....结果是2*N。2.f[][]最好开long long。学习了一位大佬的思路,清晰易懂。
2024-04-06 20:27:28
115
1
原创 十四届蓝桥杯-统计子矩阵
给定一个 N×M的矩阵 A,请你统计有多少个子矩阵 (最小 1×11×1,最大 N×M) 满足子矩阵中所有数的和不超过给定的整数 K?
2024-04-05 17:49:06
317
1
原创 十四届蓝桥杯-X进制减法
最重要的一点:如何将X进制的数转换成十进制错误想法:我以为是逐位转换再相加呢正解:按照654 = 6*100+5*10+4进行转换即X进制的321,3*10*2+2*2+1=65。
2024-04-04 18:55:21
115
1
原创 十四届CB 整数删除
1.其实是道“简单”的模拟题~2.要点:(1)找到最小数并删除(2)每次删除时,将其左右两侧数加上它(3)求经过k次操作后,剩余的数。
2024-04-02 19:35:13
105
1
原创 十四届蓝桥杯CB 子串的简写
找到所有长度>k的a.....b串:统计所有b的个数,再遍历字符串,遇到a,就加上其后b的数量1.设置一个int[]与string s对应,遇到s[i]=b,int[i] = 12.求出前缀和3.遍历,遇到a,用sum(b数量总和)-a前b的数量。
2024-04-02 19:29:25
157
1
原创 十四届蓝桥杯 F题岛屿个数
1.怪不得这么多佬都喜欢用字符读01,因为int读得处理一下当输入是010111串时,用int读,只算一个int解决方法:scanf("%1d",...),只读入一个整数2.bfs时,记得每输入一个图,将标记置为false。
2024-03-30 16:42:47
205
1
原创 动态规划专练
/不能直接去掉i,因为,f[i-1,j-v[i]]+w[i]这里用到的是第i-1层的,又j>j-v[i],说明计算f[i,j]时,j-v[i]这一项已经被第i层更新了,所以直接去掉会出错。<1>集合f[i,j,k,c]:所有从起点走到(i,j),且已经取了k件物品,且最后一件物品的价值是c的合法方案的集合。(2)由上式可知,S-[(n-1)dn-1+(n-2)dn-2+....+d1]必须是n的倍数(保证x是整数)
2024-03-19 21:21:41
1594
1
原创 十四届蓝桥杯CB--接龙数列
1.什么是动态规划?——通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法说简单点,就是把复杂问题,拆分成子问题,再求解子问题时,记住答案,减少重复计算2.什么问题可以用动态规划?——求最值的问题,如最长上升子序列、最小编辑距离、背包问题、凑零钱问题等。
2024-03-17 20:41:10
362
1
原创 蓝桥杯--飞机降落
1.原想法:这不妥妥贪心吗,直接排序,遍历,over结果...先按最晚开始时间排序(会议问题),只通过了两个案例,上acwing测试,得到一组wa案例,然后再尝试按最早开始时间排序,更少了,只过了一个此题不能用贪心,因为无法确定顺序2.观察数据范围:N<=10,无脑暴搜dfs3.分析dfs()怎么写(1)参数:应该有两个,第一个x表示搜索了几辆飞机,第二个last表示已搜索的最后一辆飞机的降落时间(2)其他部分和常见dfs代码差不多,直接看代码~
2024-03-16 20:51:48
198
1
原创 蓝桥杯-冶炼金属
根据题意可以知道,对于任何一组数据,均存在v【vmin,vmax】使得A / B = v那么:那么所求的minn = max(min1,min2,min3),maxx = min(max1,max2,max3)——取交集,才能使得v满足三组数据的A / B = v。
2024-03-16 17:29:25
355
1
原创 【深基9.例4】求第 k 小的数
输入n1≤n5000000且n为奇数)个数字ai1≤ai109),输出这些数字的第k小的数。最小的数是第0小。请尽量不要使用来写本题,因为本题的重点在于练习分治算法。
2024-02-29 23:01:20
1743
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人