算法与数据结构
文章平均质量分 73
yaoye222
拼命积累练就的本领绝不会辜负自己
展开
-
CodeTON Round 8 (Div. 1 + Div. 2) (A~D)
比赛地址:https://codeforces.com/contest/1942。原创 2024-04-02 09:42:15 · 602 阅读 · 0 评论 -
Codeforces Round 937 (Div. 4) (A~G)
考虑维护 dp[state][i] 表示当前选中歌曲为 state (集合) 且最后一首歌为 i 的情况能否组成一个清单,其中 state 使用二进制表示表示每首歌是否选中,不难发现仅选择一首歌的情况是一定满足要求的,对于每个 state ,枚举选中的歌 i(作为最后一首)与未选中的歌 j ,通过邻接矩阵查询 i 、j 是否能够相邻,若能相邻,更新。给定三个整数 a、b、c 分别表示树中有两个子节点的节点数量,有一个孩子的节点的数量与叶节点数量,问可以构造的数的最小高度。题目给出的 n 的范围很小。原创 2024-03-30 15:34:45 · 1288 阅读 · 0 评论 -
西安理工大学2024年程序设计校赛(校外同步赛)(ABCGIL)
按照上面的策略计算出来的结果为 23,而正确的结果是 25,因为我们漏算了大于 400 而小于 y 的数字(420、424),所以对于遍历的每一位数,当当前位数以前的所有数字(比如枚举到第二位,则当前数字为 4、2)是否满足相邻两位绝对差等于 2,若满足,则加上可以放在这里的数字的情况。随后开始考虑位数为 2 的所有数字,此时可以发现,所有位数为 2 的数字一定小于 y,那么答案中一定包含了所有位数为 2 的数字中满足要求的数字。,y = 427 时,对于位数为 3 的所有数字,答案中一定包括。原创 2024-03-17 22:07:18 · 918 阅读 · 0 评论 -
Educational Codeforces Round 163 (Rated for Div. 2) (A~E)
一个机器人站在(1,1)的位置(2*n的网格),每次它可以选择上下左右任意方向移动一格,但每次自主移动后需要朝移动后的地板上箭头所指方向再移动一格,问是否能够到达(2,n)处。给定一个字符串,称其中仅与一个相邻字符相同的字符为好字符,给出一个 n,要求构造一个好字符数量为 n 的长度不大于 200 的字符串。给定一个字符串,可以从首尾删除任意数量的字符获得子串(长度为偶数),问前半与后半完全相同的子串的最大长度为多少(?给出两个数字 n 与 k,代表 n 个点的图,其中对于两个点 i,j,如果。原创 2024-03-16 15:40:04 · 1049 阅读 · 3 评论 -
Codeforces Round 933 (Div. 3)
如果数组 a 中有两个最大间距,那么无解,直接输出这个最大间距就行,否则二分查找可以填在这个间距中的数字,对于数组 b 从小到大排序,数组 c 从大到小排序,使用双指针,当 b 中的元素固定不变时,c 中选择的元素越靠后则两数和越小。给出一条河的俯视图(左右为两岸),每个数字代表此位置河的深度,同时代表了在此处建立桥柱的花费(此处河的深度+1),要求桥柱间距不能超过 d,两个岸边必须有桥柱,求在连续 k 行上建立桥的最小花费是多少。给定一个数组,对于其中长度为 3 的连续子段。哭死了/(ㄒoㄒ)/~~原创 2024-03-15 08:35:39 · 1319 阅读 · 1 评论 -
AtCoder Beginner Contest 344 (A~F)
如果起点钱最多,那完全可以在起点充好钱一股气走到终点,如果中间有个点钱很多,那么我们可以在起点充钱充到足够支持我们走到那个钱更多的点。时才是最优的(M是钱数),对于每个点 x,dp维护它能走到的所有比它钱多的点 y 的花费, 如果从 x 走向 y 的花费更小或者两者花费相同但是从 x 走钱更多,则用 x 点更新 y 点。乍一看很简单,直接bfs搜索即可,但是试了一下发现第二个样例就过不去,时间复杂度过高,于是又想到了 dp ,用 dp[i][j] 来简单维护到坐标。那么对于每一组中的每个单词,枚举所有。原创 2024-03-10 10:47:22 · 912 阅读 · 1 评论 -
牛客小白月赛88 (A~E)
使用并查集来维护数组属于哪个集合,mp1[x]=y 表示 x 映射的集合为 y,mp2[y]=x 表示映射为 y 的集合为 x。用来表示第 i 个回合并且Rabbit在第 j 个位置的操作数。初始化为 1,其余为 0,对于每回合 i 的移动数 x ,都有。两者任意满足其一即可更新,最后判断。是否等于 m + 1 即可。原创 2024-03-09 16:28:04 · 499 阅读 · 3 评论 -
常用图论算法模板(2)Floyd算法求最短路
而求任意两点间距离时,我们可以使用 Floyd 算法来求解,该算法存在三重循环:枚举中间点 k 、起点 x 、终点 y :每次使用 x 与 k 和 k 与 y 之间的距离更新 x 与 y 之间的距离。通俗来说,Floyd 算法检查了两个点之间是否能通过走其他点(k)来获得更短的距离。代表从 c 向 b 有一条单向边,那么问题就转化成了从 c 是否能走到 a。代表了从 i 出发走向 j 的最短路径距离,因此,Floyd 更适合用于邻接矩阵的情况。传递闭包问题:假设有三个数字 a、b、c,已知。原创 2024-03-06 21:10:51 · 421 阅读 · 0 评论 -
牛客周赛 Round 35
给出 n 个点,若要形成图,则至少需要 n - 1 个节点,维护每个距离的点的集合,对于距离为 i 的集合,集合中的每个点至少与上一层(距离为 i - 1)集合中某个点之间存在一条边,最少需要构造的边为当前集合中点的个数。若边还有剩余,可以向上一层多连边,或者本层点之间互相连边。双指针,右指针不断向后移动,在保持两指针之间距离不超过 k 的前提下计算鸡窝个数最大值,个数越大概率越大。对原数组排序之后看每种数字的出现次数是否为偶数。绿色-本层向上一层可以连的更多的边。黄色-本层节点之间可以连多余的边。原创 2024-03-05 16:35:33 · 603 阅读 · 0 评论 -
2024 ICPC Asia Pacific Championship 签到题
跑一边dijkstra并记录路径,得到从起点开始的距离数组,根据记录的路径往回走,对于路径中的每个点枚举它能走的其他所有边,寻找最小值即可。:给出 n 行只含0与1的字符串,要求调整其中每个 1 和 0 所在字符串的位置,使得每个字符串要么全为 1,要么全部为0(不能新增字符串),求最小调整次数。:对于每个字符串,假设其中 ‘1’ 的数量为 a,‘0’ 的数量为b,调整其中数量更少的字符一定是最优选择,即答案中一定包括。一个字符串在清理掉数量少的‘异类’后,变为全部为 0 或者全部为 1 的字符串。原创 2024-03-03 16:42:34 · 1660 阅读 · 1 评论 -
AtCoder Beginner Contest 343(A~D+F)
对于线段树中的一个点来说,如果它的左右子树最大值相同,那么根节点的最大值的个数等于子节点的最大值的个数之和,否则分别找出最大值和次大值,并分别维护他们的数量。对于一个节点来说,它的最大值等于子节点各自的最大值的最大值,次大值等于子节点最大值的次大值与子节点次大值的最大值的最大值。可以用 map 存在每个数的个数,当个数从0变为1时,那么不同的数加一,当个数从1变为0时,那么不同的数减一。对于每一行,如果第 j 列为 1 那么输出 j。如果a+b等于1那么输出0,否则输出1。原创 2024-03-02 22:05:47 · 352 阅读 · 0 评论 -
天梯赛L3-008 喊山c++
最短路问题,因为题目没有给出边权,可以默认边权为1,这样就可以使用bfs搜最短路,找到与起点最短路距离最大的点,如果起点单独构成了一个连通块,那么从起点开始的呼喊一定传不到其他点。题目中说一个点最多与两个点相连,说明每个连通块的形状只可能是链或者环,因此用dfs做这个题会比较麻烦。原创 2024-02-24 15:24:23 · 181 阅读 · 0 评论 -
天梯赛L3-010 是否完全二叉搜索树 c++
当我们按照二叉搜索树规则把数放进数组中,将其中所有非0数输出就是题目要求的层序遍历结果,如果所有非0数是连续的(中间没有间隔0)那么这颗树一定是完全二叉树,否则不是。题目要求我们按给定数字顺序构建一颗左子树大,右子树小的二叉搜索树,并给出层序遍历结果与该树是否为完全二叉树。由于题目给出的数据范围 N ≤ 20,这个题目可以用数组存树,数组的大小最多只需要。即可(最坏情况排成一条链)原创 2024-02-24 15:55:52 · 261 阅读 · 0 评论 -
天梯赛L3-011 直捣黄龙 c++
这个题感觉像是紧急救援那道题的复杂版,多加了几个条件,一样是最短路加上路径记录。由于数据范围很小,N最大不超过200,所以可以直接把map当成超级数组用。原创 2024-02-24 17:11:59 · 180 阅读 · 0 评论 -
蓝桥算法赛第6场
根据巴什博弈论,若sum能被m+1整除,则先手必败,否则先手必胜。不难发现对于一个长度为 n 的数组,在不超过 n 次操作下一定能将所有数变为正数,全部求和即可。题目要求在给定区间中找出满足封闭图形个数等于 k 的数的数量,考虑用数位dp来解决。线段树某个节点的左节点最大值次大值分别为a、b,右节点为c、d,那么该节点的最大值为。,化简即可发现这个数一定是 8 的倍数,最后记得特判0的情况。设一个任意奇数 x,则两个连续奇数的平方差可以表示为。在读入数据之前,我们提前初始化数组dp,使用。原创 2024-02-25 10:54:53 · 832 阅读 · 0 评论 -
天梯赛L3-016 二叉搜索树的结构 c++
例如将{ 2 4 1 3 0 }插入后,得到一棵二叉搜索树,则陈述句如“2是树的根”、“1和4是兄弟结点”、“3和0在同一层上”(指自顶向下的深度相同)、“2是4的双亲结点”、“3是4的左孩子”都是正确的;二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;它的左、右子树也分别为二叉搜索树。输入在第一行给出一个正整数N(≤100),随后一行给出N个互不相同的整数,数字间以空格分隔,要求将之顺次插入一棵初始为空的二叉搜索树。原创 2024-02-25 16:16:47 · 570 阅读 · 0 评论 -
牛客周赛 Round 34(A~F)
因为给出的是一个偶数,所以这个数一定能全部分成偶数。用字符串读入,从前往后遍历,如果是偶数就直接存起来,如果是奇数那么存到临时变量中继续找,直到找到一个偶数再把临时变量存起来。若 x > 6,可以从中减出 6 个按上面第二种方式摆在右下角,剩下的按第一种摆在左上角,注意此时 n 与 m 不能同时为 4,不然无法同时摆下这两种形状。首先看一下是不是非排列,如果不是的话就不用改了,是的话就把第一个改成一个大于。如果字母相同,那么只有两种组合a与aa,否则四种排列组合。cf原题,参考了大佬的。原创 2024-02-26 19:35:19 · 463 阅读 · 1 评论 -
天梯赛L3-017 森森快递 c++
为了让公司整体效益更佳,森森想知道如何安排订单的运输,能使得运输的货物重量最大且符合道路的限制?例如我们安排1号城市到4号城市以及2号城市到4号城市两张订单的运输,则这两张订单的运输同时受2-3以及3-4两条道路的限制,因为两张订单的货物可能会同时在这些道路上运输。应当选择交叉尽可能少的区间,减少路线冲突,这样才能使总运输质量最大,将所有询问按照右边界从小到大排(注意题目中给出的两个数 a、b,a 可能大于 b),用线段树维护区间的最小值,对每个查询区间找最小值加到答案中,并将区间整体减去这个最小值。原创 2024-02-26 20:27:13 · 650 阅读 · 1 评论 -
天梯赛L3-019 代码排版 (28分)c++
函数,eval函数中传入一个参数 idx ,表示它负责的代码部分的下标的开始位置,当 idx 处为左花括号时,他会一直往后处理直到遇到与开始处相匹配的右花括号。当处理的过程中遇到关键字时,就交给 evalKeyword 处理,evalKeyword 中遇到关键字后面需要处理的代码段时再调用 eval,这样两个函数互相递归调用。为了减小被挑战的几率,有些选手会故意将代码写得很难看懂,比如把所有回车去掉,提交所有内容都在一行的程序,令挑战者望而生畏。默认程序起始没有缩进;按题面要求的格式,输出排版后的程序。原创 2024-02-27 16:54:33 · 506 阅读 · 2 评论 -
常用图论算法模板(1)dijkstra算法求最短路
dijkstra算法主要用于求解图论算法中任意两点间的最短路问题,该算法维护了一个dist数组,代表了每个点距离起点的距离,在开始时,dist数组中的元素应当全部为正无穷,且起点在dist数组中的值为0。该算法每次从距离起点距离未确定的点中找出一个距离起点最近的点,将其确定下来,并用该点距离起点的距离更新图中其他点与起点的最短距离。当图中存在负权边时dijkstra算法无法保证正确性dijkstra算法存在两种版本。原创 2024-02-28 21:35:32 · 1052 阅读 · 0 评论 -
Codeforces Round 929 (Div. 3) (A~E)
不难发现当数组中存在数字 1 时,当仅存在一个 1 时,这个 1 一定要放在最前面,当出现多于一个的 1 时,则无解。当数组中不存在 1 时,可以对数组中所有数除以所有数的最小公约数,此时取模的结果也会随之除以这个最小公约数(虽然结果变了但只要非 0 就符合要求),检查此时数组中 1 的个数即可。,假设 k = 1,找出当 x = 0 时 y 的最大值以及 y = 0 时 x 的最大值,随后在这两个数的范围内枚举 a 与 b 的指数 i 与 j,当 l 能够被。在读入数组的时候,统计一下数组所有元素的和。原创 2024-02-29 20:28:41 · 815 阅读 · 0 评论 -
Codeforces Round 930 (Div. 2) (A、B)
我太菜了只会两道T_T。原创 2024-03-01 16:58:55 · 1085 阅读 · 1 评论