随笔分类 -  之前的比赛题目 / 算法从0开始

摘要:思路来源:Zed222 如果一个区间里的数都有这个质数,那么我们就直接利用性质$\phi(n * p) = \phi(n) * p$,如果没有这个区间中有没有这个质数的,那么就退化到了单点修改,当时比赛的时候,队伍感觉就没有了头绪,而今天补题发现确实是单点修改,并且代码跑的飞快,具体的证明就不深究了 阅读全文
posted @ 2021-11-12 20:57 Xxaj5 阅读(105) 评论(0) 推荐(0)
摘要:计算一个式子:\(\sum\limits_{i = 1}^n \cfrac{n}{i}\)。 很明显可以直接一个$for$循环,$O(n)$求出结果,但是我们可以将其优化到$O(\sqrt n)$。 例题 AcWing199. 余数之和 给定正整数n和k,计算$(k \mod 1) + (k \mo 阅读全文
posted @ 2021-10-31 11:23 Xxaj5 阅读(114) 评论(0) 推荐(0)
摘要:原题链接:AtCoder F - Parenthesis Checking 一个全由$'('\(和\)')'$构成的字符串,由以下两个操作: 1 l r交换字符串第$l$个和第$r$个字符。 2 l r询问$S[l-r]$是否是一个合法序列。 很明显是一个线段树操作,这题蓝桥杯貌似有类似的,但是那道 阅读全文
posted @ 2021-10-24 17:06 Xxaj5 阅读(90) 评论(0) 推荐(0)
摘要:本博客的主要思路来源:树链剖分详解(洛谷模板 P3384)、OI Wiki 树链剖分 作用 简单点说,树链剖分就是将一棵树分成几条链,然后给它标号标成线性,然后处理区间问题: 将树的$x$点到$y$点最短路径上所有结点的值都加d 询问树的$x$点到$y$点的路径和 将以$x$为根的子树内所有值加$d 阅读全文
posted @ 2021-10-23 21:36 Xxaj5 阅读(114) 评论(0) 推荐(0)
摘要:原题链接:E - LEQ 思路: 题目要求对于从数组1~n找出所有符合开头数字小于等于结尾数字的子序列,\(A' = (A_1', A_2', ... , A_k')\),满足$A_1' \leq A_k'$,很显然,我们只需要找到任何一对$a_i \leq a_j$数对,然后它的贡献是$2^{j 阅读全文
posted @ 2021-10-06 19:57 Xxaj5 阅读(141) 评论(0) 推荐(0)
摘要:换根$DP$属于树形$DP$,是二次扫描,因为这类问题通常不会指定根结点,并且根节点的变化会对一些值,例如子结点深度和、点权和等产生影响。 通常需要二次$DFS$,第一次$DFS$来处理深度,以及点权和之类的问题,第二次$DFS$开始动态规划。 令$u$为当前结点,$v$为当前结点的叶子结点。首先需 阅读全文
posted @ 2021-09-30 18:10 Xxaj5 阅读(483) 评论(0) 推荐(0)
摘要:原题链接 Codeforces Global Round 16 E. Buds Re-hanging 首先想到,如果我们把一个$buds$挂到一个叶子上,那么会使得叶子总数减$1$。 还有就是如果我们可以把这个树搞成一条链,那么总叶子数一定是最少的,就是让树“越瘦越好”。 如果原来一个$buds$挂 阅读全文
posted @ 2021-09-16 12:05 Xxaj5 阅读(101) 评论(0) 推荐(0)
摘要:数位$DP$ 经过一天半的苦苦挣扎,真的很感谢\(Acwing \,\, yxc\)的讲解,终于感觉自己入门一些了。 数位$DP$通常是给定一个$[L,R]\(区间,让你求区间中满足题目要求的数的个数,然后我们只需要利用前缀和思想,分别求出\)[0, R]\(和\)[0, L]$的满足要求的数的个数 阅读全文
posted @ 2021-09-08 16:42 Xxaj5 阅读(110) 评论(2) 推荐(0)
摘要:原题链接:AcWing 240. 食物链 扩展域与边带权的并查集: 并查集实际上是由若干颗树构成的森林,我们可而一再数中的每条边上记录一个权值,即维护一个$d$,用$d[x]$保存节点$x$到父节点$fa[x]$之间的边权。每次路径压缩之后,每个访问过的节点都会直接指向树根,然后同时更新这些节点的$ 阅读全文
posted @ 2021-08-31 16:26 Xxaj5 阅读(89) 评论(0) 推荐(1)
摘要:原题链接AcWing 456. 车站分级 抽象出题意,停靠过的车站的等级一定严格大于为停靠过的车站的等级,且不存在环,例如车站$A$等级大于车站$B$,则$A >= B + 1$,不妨从$B$向$A$连一条边,表示等级关系,题目要求车站的最小等级中最大是多少,即求最长路,那这就是一个差分约束系统。 阅读全文
posted @ 2021-08-24 22:09 Xxaj5 阅读(126) 评论(0) 推荐(0)
摘要:对于无向图,所有边都是联通的: (1)存在欧拉路径的充分必要条件:度数为奇数的点只能有$0$个或$2$个,如果起点和终点后重合那么度数为奇数的点就只能有$0$个,否则就只能有两个。 (2)存在欧拉回路的充分必要条件:度数为奇数的点只能有0个。 对于有向图,所有边都联通: (1)存在欧拉路径的充分必要 阅读全文
posted @ 2021-08-23 21:50 Xxaj5 阅读(127) 评论(0) 推荐(0)
摘要:二分图 不存在长度为奇数的环 为了描述方便将两个集合分成左和右两个部分,所有匹配边都是横跨左右两个集合,可以假想成男女配对。 增广路径: 从非匹配点出发,经历非匹配边,匹配边,非匹配边,匹配边,...,非匹配点的一条路径。 二分图的一组匹配$S$是最大匹配,当且仅当图中不存在$S$的增广路。 求二分 阅读全文
posted @ 2021-08-22 21:41 Xxaj5 阅读(83) 评论(0) 推荐(0)
摘要:给定 \(n\) 本书,编号为 1∼n。 在初始状态下,书是任意排列的。 在每一次操作中,可以抽取其中连续的一段,再把这段插入到其他某个位置。 我们的目标状态是把书按照 1∼n 的顺序依次排列。 求最少需要多少次操作。 解: 考虑每一步决策数量,当抽取长度为 \(len\) 的一段时,有 \(n - 阅读全文
posted @ 2021-08-21 12:01 Xxaj5 阅读(90) 评论(0) 推荐(0)
摘要:原题链接:AcWing 168. 生日蛋糕 设当前体积是$v,h、r$分别记录每层的高度和半径,由于整个蛋糕的上表面面积等于最大蛋糕的圆面积,所以枚举到最大一层的时候直接加上即可。 **优化搜索顺序:**搜数量小的分支,可以从蛋糕最下边一层开始搜索,因为最下边一层占体积最大,然后对于枚举半径$R$和 阅读全文
posted @ 2021-08-18 19:24 Xxaj5 阅读(64) 评论(0) 推荐(0)
摘要:原题链接 India Fights Corona 题意: 有$n$个城市,$m$条道路,其中有些城市自己有医院,所以可以在自己城市做核酸检测,那么花费就只有就医费用,而对于那些自己没有医院的城市,需要去别的城市就医,那么他们需要花的费用就是就医费 + 路费,问最小花费是多少。 题解: 之前只写过多源 阅读全文
posted @ 2021-08-18 11:28 Xxaj5 阅读(53) 评论(0) 推荐(0)
摘要:剪枝常用策略: **优化搜索顺序:**可以先搜规模小的分支。 **排除等效冗余:**例如对于一个组合型枚举,$1,2,3$与$2,3,1$这是一样的,所以可以排除一下。 **可行性剪枝:**搜索过程中及时对状态进行检查,发现分支不符合本意,即提早发现是一个死胡同,就剪掉; **最优性剪枝:**如果当 阅读全文
posted @ 2021-08-17 21:20 Xxaj5 阅读(83) 评论(0) 推荐(0)
摘要:原题连接:AcWing 190. 字串变换 题意: 已知有两个字串 \(A, B\) 及一组字串变换的规则(至多 \(6\) 个规则): \(A_1→B_1\) \(A_2→B_2\) \(…\) 规则的含义为:在 \(A\) 中的子串 \(A_1\) 可以变换为 \(B_1\)、\(A_2\) 可 阅读全文
posted @ 2021-08-11 17:01 Xxaj5 阅读(82) 评论(0) 推荐(0)
摘要:题意 给定一张 \(N\) 个点(编号 \(1,2…N\)),\(M\) 条边的有向图,求从起点 \(S\) 到终点 \(T\) 的第 \(K\) 短路的长度,路径允许重复经过点或边。 注意: 每条最短路中至少要包含一条边。 由于直接$BFS$搜索空间特别大,所以考虑$A*$算法 以从$x$点到终点 阅读全文
posted @ 2021-08-11 16:51 Xxaj5 阅读(55) 评论(0) 推荐(0)
摘要:原题:八数码 在八数码中,估价函数就是所有数字在state中的位置与目标位置end中的位置的曼哈顿距离之和,即: \[ f(state) = \sum\limits^8_{i = 1} ( |state \_x_i - end \_x_i | + |state \_y_i - end \_y_i | 阅读全文
posted @ 2021-08-11 11:08 Xxaj5 阅读(358) 评论(0) 推荐(1)
摘要:启发式搜索 A* 从用优先队列的$BFS$开始想,优先队列的$BFS$策略显然不够完善,因为我们只在乎当前代价很小,而对于未来的搜索中,代价可能会更大,而那先当前代价大的在未来的代价中可能很小,所以为了提高搜索效率,可以对未来产生的代价进行预估,即估价函数,我们仍然维护一个堆,那么每次从堆中取出的就 阅读全文
posted @ 2021-08-11 11:01 Xxaj5 阅读(149) 评论(0) 推荐(0)