随笔分类 - 蓝桥杯每日一题2024
AcWing蓝桥杯集训·每日一题2024
摘要:1349. 修理牛棚 (贪心) 略 import java.util.*; public class Main { private static final int N = 210; private static int M, S, C; private static int[] a, b; pub
阅读全文
摘要:1375. 奶牛回家 (最短路) 略 import java.util.*; public class Main { private static final int N = 60, INF = 0x3f3f3f3f; private static int n = 52, m; private st
阅读全文
摘要:3999. 最大公约数 (欧拉函数) import java.util.*; public class Main { private static int T; private static long a, m; private static long gcd(long a, long b) { r
阅读全文
摘要:4009. 收集卡牌 (数学期望|状压DP) 略 import java.util.*; public class Main { private static final int N = 16, M = 1 << N; private static int n, m; private static
阅读全文
摘要:211. 计算系数 (组合计数|逆元) 数论之快速幂、扩欧算法、同余与逆元 组合计数 import java.util.*; public class Main { private static final int mod = 10007; private static int[][] C = ne
阅读全文
摘要:205. 斐波那契 (矩阵乘法|快速幂) 对矩阵和矩阵快速幂的讲解 import java.util.*; public class Main { private static final int mod = 10000; private static int[][] mul(int[][] a,
阅读全文
摘要:3377. 约数的个数 (分解质因数) 略 试除法 import java.util.*; public class Main { private static int calc(int x) { int res = 0; for (int i = 1; i <= x / i; i++) { if
阅读全文
摘要:4199. 公约数 (最大公约数|二分) 思路:先用求最大公约数的模板求出a与b的最大公约数d,然后得到从1到d的全部公约数,最后利用二分法找到满足l≤x≤r条件的最大的公约数x。 import java.util.*; public class Main { private static int
阅读全文
摘要:504. 转圈游戏 (快速幂) 快速幂讲解 import java.util.*; public class Main { private static int n, m, k, x; private static long qmi(long a, int b, int p) { long res
阅读全文
摘要:3465. 病毒溯源 (邻接表|DFS) 数组模拟邻接表讲解,h表示每个结点的第一条邻边的编号,e表示每条边的终点,ne表示每条边下一条邻边的编号。 import java.util.*; public class Main { private static final int N = 10010,
阅读全文
摘要:388. 游戏 (区间DP|博弈论) 思路:在最坏情况下考虑问题,每个人都选择对自己有利的情况,dp[i][j]指的是对方获得的分差,分值总和固定为sum,因此我方方差越大,对方的分值就越小。最后A+B=sum,A-B=diff。 import java.util.*; public class M
阅读全文
摘要:1371. 货币系统 (完全背包DP) 思路:如何优化空间 所以dp[i][j] = dp[i-1][j] + dp[i][j - v] import java.util.*; public class Main { private static int V, N; private static i
阅读全文
摘要:312. 乌龟棋 (线性DP) 思路:本题的核心在于到达终点时刚好用光M张爬行卡片,因此这道题不是对我们的棋盘索引的dp,而是对卡片数量的dp。假设我们总共有a张1步卡,b张2步卡,c张3步卡,d张4步卡,最终状态一定是dp[a][b][c][d],因为我们最后会把卡片全用完,针对上一步每次有四种情
阅读全文
摘要:731. 毕业旅行问题 (状态压缩DP) 思路:使用状态压缩DP,dp[i][j]中i表示状态(二进制表示),j表示最后所在城市。算法时间复杂度是O(2n*n2),需要优化掉没有访问过1号城市的状态和无效状态。 import java.util.*; public class Main { priv
阅读全文
摘要:1265. 数星星 (树状数组) 思路:本题要统计每个星星左下角星星的数目,由于星星按y坐标增序给出,y坐标相同的按x坐标增序给出,所以不用关注y,可以视作每个x位置有几颗星星就为几的数组,每次统计左侧前缀和,再将当前计算的星星x位置数加一,使用树状数组(推荐视频:五分钟丝滑动画讲解 | 树状数组)
阅读全文
摘要:1413. 矩形牛棚 (单调栈) 思路:本题是在一个含多个被破坏点的矩阵中找最大矩形,可通过将原数组处理成高度数组(当前所在列向上连续有多少0),将问题转化成R行个类似接雨水问题,也就是求最大面积矩形,这可以使用从小到大的单调栈求左右第一个比当前小的位置获得。 import java.util.*;
阅读全文
摘要:1402. 星空之夜 (哈希表) 思路:整体方法就是使用DFS找出所有星群,难点是判断星群是否相似,这里是通过累加星群内每两点之间的距离作为哈希值判断是否相似。 import java.util.*; public class Main { private static final double e
阅读全文
摘要:528. 奶酪 (并查集) 思路:大体就是并查集的模板,空洞数组从1到n,增加0作为下表面,n+1作为上表面,遍历所有空洞,若与上下表面相切或是相交就将i join 到0或n+1,然后再比较任意两个空洞,两者相切或是相交就join起来,最后判断0与n+1是否相连。 import java.util.
阅读全文
摘要:687. 扫雷 (Flood Fill) 思路:首先处理读取的网格str数组为g数组,若为地雷,则对应位置为-1,否则对应位置为以当前位置作为中心九宫格内地雷数量。然后遍历新数组g,若为0,则点击次数加一,再使用DFS处理当前位置即周围九宫格,若也为0继续DFS,所有搜索过的位置都标记为-1,最后再
阅读全文
摘要:1355. 母亲的牛奶 (BFS) 思路:使用BFS搜索所有可能出现的情况,同时保存到used数组,防止重复搜索,最后遍历used数组,因为只求C桶中牛奶,所有先遍历C桶,出现A桶为空立即打印结果并break。 import java.util.*; public class Main { priv
阅读全文