分类: ALGORITHM

My Algorithm Learning

106 篇文章

字母
Original Link 思想: DFS。 由题意易知,从左上角的字母开始搜索,最多经过 2626 个不同的字母。 则将走过的字母利用 vis 数组进行标记,若走过标记为 True。 递归处理每一个格子,每一层利用偏移量数组遍历上下左右四个方向。 用 res 维护最大可以走过的不同字母的个数,每次…
马蹄铁
Original Link 思想: DFS。 要想使得串保持平衡,即 (((((....))))) 形式,则设 p 为 ( 的数量,q 为 ) 的数量。 特别的,起始时为 ) 无论如何搜索都无法平衡,最大长度为 00。 在搜索时,当 q != 0 时,若下次出现 ( ,此时为 (()(... 亦不…
棋盘挑战
Original Link 思想: DFS。 注意棋盘的每一行,每一列及其有棋子存在的对角线的平行线上有且只有一个棋子。 递归处理,每一次递视为一次对是否放置棋子的判断,递归的层数视为棋盘的层数,每一层只能放置一个棋子。 对于递归的每一层,遍历这层棋盘的格子,判断以该格子的列和对角线的平行线上是否存…
数组操作
Origional Link 思想: 贪心,模拟。 首先对数组进行从小到大排序,再找到第一个 a[idx] != 0 的位置。 对于每次询问,以 base 记录当前数组已经减去的总值,判断时应当计算当前元素与 base 的差值。 若 a[idx] - base > 0 说明需要将后续所有元素减…
货仓选址
Origional Link 思想: 贪心。 设仓库选址最佳处为 PP,此时在该位置左侧存在 mm 个货仓,右侧存在 nn 个货仓,总距离为 LL。 若更改货仓位置为 P1P-1,则总长度变为 Lm+nL - m + n。 若更改货仓位置为 P+1P + 1,则总长度变为 L+mnL + m - n。…
ABC的整除问题
原题链接 描述: 给定三个非负整数 A,B,CA,B,C,且保证 AB,C0A\le B,C\ne 0,求在区间 [A,B][A, B] 中,存在多少个整数可以被 CC 整除? 输入格式: 第一行,一个整数 TT,代表 TT 个测试样例。 接下来 TT 行,每行给出三个非负整数 A,B,CA,B,C。 输出格式: …
最小正整数
Original Link 思想: 最大公约数和最小公倍数。 要求构造出的数末尾包含 kk00,且可以被 nn 整除的最小整数; 则构造出的数必然也可以被 10k10^k 整除,满足同时被 nn10k10^k 整除, 显然,该数为 nn10k10^k 的最小公倍数时即可满足条件…
寻找变化前的01序列
Original Link 思想: 模拟 用 res 记录出现的连续的 11 的个数: 若出现 s[i] == '0' 则将其置零。 若 res == 5 则不输出任何内容。 其他情况下直接输出 s[i] 代码: #include <bits/stdc++.h> u…
青蛙跳
Origional Link 思想: 思维。 青蛙一共跳了 k 次,则: 当 k 为奇数时,向右边跳了 k / 2 + 1 次,向左边跳了 k / 2 次。 当 k 为偶数时,向右边跳了 k / 2 次,向左边跳了 k / 2 次。 代码: #include <bits/stdc++.h>…
最短距离
Original Link 思想: 前缀和。 由于出口为环状,故将数组首尾相连。 构造前缀和数组,即可得到在任意出口顺时针方向或逆时针向走到对应出口的距离之和。 对于每次询问,输出顺时针和逆时针方向上,两个出口最短的距离即可。 代码: #include <bits/stdc++.h> u…